RouterOS へ鍵交換方式で SSH ログインするには(DSA / RSA 両対応)
従来の RouterOS は鍵交換方式での SSH ログインをサポートしているものの、DSA 鍵にしか対応しておらず、RSA 鍵には対応していませんでした。しかし、まだ RC 版(Release Candidate = リリース候補版)ではあるものの、最新の RouterOS 6.31 からは RSA 鍵にも対応したようです。以下は RouterOS 6.31 の changelog です。
What's new in 6.31rc11 (2015-Jul-28 16:06):
) ipsec - fix replay window, was accidently disabled since version 6.30;
) ssh - allow host key import/export;
) ssh - use 2048bit RSA host key when strong-crypto enabled;
) ssh - support RSA keys for user authentication;
) wireless - improved WMM-PowerSave support in wireless-cm2 package;
) pptp & l2tp - fixed problem where android client could not connect if
both dns names were not provided (was broken since v6.30);
) auto upgrade - added ability to select which versions to select when upgrading;
) quickset - fixed HomeAP mode;
) lte - improved modem identification to better support multiple identical modems;
) snmp - fix system scripts table;
*) lcd - added LCD package for all architectures (for serial port LCD modules)
今回は現時点の最新バージョンである RouterOS 6.31rc11 で RSA 鍵による SSH ログインを試してみます。
テスト環境
テストには以下、2 種類の OS バージョンを利用しました。
ブランチ |
OS バージョン |
安定版 |
6.30.2 |
開発版 |
6.31rc11 |
安定版でバージョンを確認した結果は以下の通りです。仮想環境でテストしている為、CPU が "QEMU" と表示されています。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | [admin@RoS-6.30.2] > /system resource print
uptime: 14m9s
version: 6.30.2
build-time: Jul/22/2015 11:17:58
free-memory: 1875.8MiB
total-memory: 1894.2MiB
cpu: QEMU
cpu-count: 1
cpu-frequency: 0MHz
cpu-load: 1%
free-hdd-space: 135.8MiB
total-hdd-space: 166.7MiB
write-sect-since-reboot: 8928
write-sect-total: 8928
architecture-name: x86
board-name: x86
platform: MikroTik
|
開発版でバージョンを確認した結果は以下の通りです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | [admin@RoS-6.31rc11] > /system resource print
uptime: 13m28s
version: 6.31rc11
build-time: Jul/28/2015 16:06:57
free-memory: 994.6MiB
total-memory: 1011.5MiB
cpu: QEMU
cpu-count: 1
cpu-frequency: 0MHz
cpu-load: 1%
free-hdd-space: 132.4MiB
total-hdd-space: 166.7MiB
write-sect-since-reboot: 9560
write-sect-total: 9560
architecture-name: x86
board-name: x86
platform: MikroTik
|
結論
以下の結果になりました。
RouterOS 6.30.2 でのテスト結果
OS バージョン |
認証方式 |
鍵長 |
結果 |
理由 |
RouterOS 6.30.2 |
DSA |
768bit |
N/A |
1,024bit 以外の DSA 鍵は作成出来ない |
〃 |
DSA |
1,024bit |
OK |
- |
〃 |
DSA |
2,048bit |
N/A |
1,024bit 以外の DSA 鍵は作成出来ない |
〃 |
DSA |
4,096bit |
N/A |
1,024bit 以外の DSA 鍵は作成出来ない |
〃 |
RSA |
768bit |
NG |
incorrect passphrase エラーで RouterOS に RSA 鍵を import 出来ない |
〃 |
RSA |
1,024bit |
NG |
〃 |
〃 |
RSA |
2,048bit |
NG |
〃 |
〃 |
RSA |
4,096bit |
NG |
〃 |
RouterOS 6.31rc11 でのテスト結果
OS バージョン |
認証方式 |
鍵長 |
結果 |
理由 |
RouterOS 6.31rc11 |
DSA |
768bit |
N/A |
1,024bit 以外の DSA 鍵は作成出来ない |
〃 |
DSA |
1,024bit |
OK |
- |
〃 |
DSA |
2,048bit |
N/A |
1,024bit 以外の DSA 鍵は作成出来ない |
〃 |
DSA |
4,096bit |
N/A |
1,024bit 以外の DSA 鍵は作成出来ない |
〃 |
RSA |
768bit |
NG |
鍵長が短すぎて RouterOS に RSA 鍵を import 出来ない |
〃 |
RSA |
1,024bit |
OK |
- |
〃 |
RSA |
2,048bit |
OK |
- |
〃 |
RSA |
4,096bit |
OK |
- |
DSA 鍵を使った SSH ログイン設定
DSA 鍵であれば RouterOS 6.30.2 にも RouterOS 6.31rc11 にも、両方ログイン可能です。
DSA 鍵は 1,024bit 長でしか作成することが出来ません。1,024bit 長以外で鍵を作成しようとするとエラーになります。
| $ ssh-keygen -t dsa -b 768
DSA keys must be 1024 bits
$ ssh-keygen -t dsa -b 2048
DSA keys must be 1024 bits
$ ssh-keygen -t dsa -b 4096
DSA keys must be 1024 bits
|
そこで 1,024bit 長の鍵を作成します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | $ ssh-keygen -t dsa -b 1024
Generating public/private dsa key pair.
Enter file in which to save the key (/home/tc/.ssh/id_dsa):
Created directory '/home/tc/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/tc/.ssh/id_dsa.
Your public key has been saved in /home/tc/.ssh/id_dsa.pub.
The key fingerprint is:
d6:b5:5e:1d:31:6b:2b:e0:09:37:10:20:a8:75:52:17 tc@box
The key's randomart image is:
+---[DSA 1024]----+
| oo Eoo. o |
| + .o . +|
| o o . +. + |
| . .+.+...o|
| S .o.....|
| . . .. |
| . |
| |
| |
+-----------------+
|
作成した公開鍵を SCP で RouterOS にコピーします。
| $ scp .ssh/id_dsa.pub admin@192.168.1.11:
The authenticity of host '192.168.1.11 (192.168.1.11)' can't be established.
DSA key fingerprint is 1f:21:7e:94:d1:86:97:ac:14:9b:e7:c9:ae:db:ec:ba.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.11' (DSA) to the list of known hosts.
admin@192.168.1.11's password:
id_dsa.pub 100% 596 0.6KB/s 00:00
|
RouterOS 側で公開鍵を import します。今回は admin ユーザに紐づけて import しました。
| /user ssh-keys import public-key-file=id_dsa.pub user=admin
|
これで Linux 側から RouterOS に鍵交換方式で SSH ログイン出来るようになりました。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 | $ ssh -i ~/.ssh/id_dsa admin@192.168.1.11
MMM MMM KKK TTTTTTTTTTT KKK
MMMM MMMM KKK TTTTTTTTTTT KKK
MMM MMMM MMM III KKK KKK RRRRRR OOOOOO TTT III KKK KKK
MMM MM MMM III KKKKK RRR RRR OOO OOO TTT III KKKKK
MMM MMM III KKK KKK RRRRRR OOO OOO TTT III KKK KKK
MMM MMM III KKK KKK RRR RRR OOOOOO TTT III KKK KKK
MikroTik RouterOS 6.30.2 (c) 1999-2015 http://www.mikrotik.com/
ROUTER HAS NO SOFTWARE KEY
----------------------------
You have 23h11m to configure the router to be remotely accessible,
and to enter the key by pasting it in a Telnet window or in Winbox.
Turn off the device to stop the timer.
See www.mikrotik.com/key for more details.
Current installation "software ID": XXXX-XXXX
Please press "Enter" to continue!
[admin@RoS-6.30.2] >
|
RSA 鍵を使った SSH ログイン設定
RSA 鍵で SSH ログイン出来るのは RouterOS 6.31rc11 だけです。RouterOS 6.30.2 は RSA 鍵に対応していない為、ログイン出来ない… 以前に公開鍵を import 出来ません。RSA 鍵を使った SSH ログインの設定手順も DSA 鍵の場合と全く同じです。まず、鍵を生成します。以下では 2,048bit 長の鍵を生成していますが、1,024bit 長や 4,096bit 長の鍵でも問題無く、ログイン出来ました。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | $ ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (/home/tc/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/tc/.ssh/id_rsa.
Your public key has been saved in /home/tc/.ssh/id_rsa.pub.
The key fingerprint is:
ed:5c:ba:56:70:5d:78:69:54:b2:30:cf:33:f7:6d:04 tc@box
The key's randomart image is:
+---[RSA 2048]----+
| o Eo+|
| =.*o|
| .Boo|
| .. . .=o|
| S .o. +|
| o o. . |
| +. |
| .. |
| .. |
+-----------------+
|
作成した公開鍵を SCP で RouterOS にコピーします。
| $ scp ~/.ssh/id_rsa.pub admin@192.168.1.22:
admin@192.168.1.22's password:
id_rsa.pub 100% 388 0.4KB/s 00:00
|
RouterOS 側で公開鍵を import します。今回は admin ユーザに紐づけて import しました。
| /user ssh-keys import public-key-file=id_rsa.pub user=admin
|
これで Linux 側から RouterOS に鍵交換方式で SSH ログイン出来るようになりました。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 | $ ssh -i ~/.ssh/id_rsa admin@192.168.1.22
MMM MMM KKK TTTTTTTTTTT KKK
MMMM MMMM KKK TTTTTTTTTTT KKK
MMM MMMM MMM III KKK KKK RRRRRR OOOOOO TTT III KKK KKK
MMM MM MMM III KKKKK RRR RRR OOO OOO TTT III KKKKK
MMM MMM III KKK KKK RRRRRR OOO OOO TTT III KKK KKK
MMM MMM III KKK KKK RRR RRR OOOOOO TTT III KKK KKK
MikroTik RouterOS 6.31rc11 (c) 1999-2015 http://www.mikrotik.com/
ROUTER HAS NO SOFTWARE KEY
----------------------------
You have 23h9m to configure the router to be remotely accessible,
and to enter the key by pasting it in a Telnet window or in Winbox.
Turn off the device to stop the timer.
See www.mikrotik.com/key for more details.
Current installation "software ID": W9LQ-0HD2
Please press "Enter" to continue!
[admin@RoS-6.31rc11] >
|
注意点
公開鍵を import するとパスワード認証は自動的に無効化される
RouterOS でユーザに紐づけて公開鍵を import すると自動的にパスワード認証は無効になり、公開鍵認証しか出来なくなるようです。この状態で SSH ログインしようとするとパスワードを確認されるものの、正しいパスワードを入力してもログイン出来なくなります。
| $ ssh admin@192.168.1.22
admin@192.168.1.22's password:
Permission denied, please try again.
|
パスワード認証に戻したい場合は「コンソールからログインする」「(鍵交換方式では無く)パスワード認証でログイン出来るユーザで SSH ログインする」等の方法で RouterOS へログインし、ユーザに import されている公開鍵を削除します。これで該当ユーザはパスワード認証方式に戻ります。
| [admin@RoS-6.30.2] > /user ssh-keys print
# USER KEY-OWNER
0 admin tc@box
[admin@RoS-6.30.2] > /user ssh-keys remove 0
[admin@RoS-6.30.2] > /user ssh-keys print
# USER KEY-OWNER
[admin@RoS-6.30.2] >
|
RSA 鍵非対応バージョンに RSA 鍵を import するとエラーになる
上述の通り、RSA 鍵に対応するのは 6.31 以降です。6.30 以前で RSA 鍵を import しようとするとエラーになります。Linux 側で RSA 鍵を用意し、SCP で RouterOS 6.30.2 にコピーします。
| $ ssh-keygen -l -f ~/.ssh/id_rsa.pub
2048 79:ac:50:a6:be:33:08:a4:02:7c:04:7a:c7:1d:47:76 /home/tc/.ssh/id_rsa.pub (RSA)
$ scp ~/.ssh/id_rsa.pub admin@192.168.1.11:
|
RSA 鍵を import しようとするとエラーになります。あたかも「パスフレーズが間違っている」ようなエラーが出ますが、実際には「RSA 鍵を認識出来ないだけ」のようです。
| [admin@RoS-6.30.2] > /user ssh-keys import public-key-file=id_rsa.pub user=admin
unable to load key file (incorrect passphrase?) !
|
1,024bit 未満の RSA 鍵は鍵長が短すぎて import 出来ない
1,024bit 未満の RSA 鍵は鍵長が短すぎて import しようとするとエラーになります。少なくても 1,024bit 以上の鍵を利用する必要があります。
| [admin@RoS-6.31rc11] > /user ssh-keys import public-key-file=id_rsa.pub user=admin
keys smaller than 1024bit are not allowed!
|