読者です 読者をやめる 読者になる 読者になる

らくがきちょう

なんとなく

RouterOS へ鍵交換方式で SSH ログインするには(DSA / RSA 両対応)

MikroTik Network

従来の 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" と表示されています。

[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

開発版でバージョンを確認した結果は以下の通りです。

[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 長の鍵を作成します。

$ 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 ログイン出来るようになりました。

$ 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 長の鍵でも問題無く、ログイン出来ました。

$ 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 ログイン出来るようになりました。

$ 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!