[Cisco IOS] SSHによるリモートアクセスの設定

# 1. はじめに
今日はSSHの設定方法を勉強します。
まだまだTelnet接続を使用している環境も多いと思いますが、世の中的にはManagementアクセスもよりセキュアにする方向に向かっているので、Telnetは割愛しました。

# 2. 前提
Catalystに192.168.1.1を設定し、SSHによるリモートアクセスを確認します。

# 3. 設定

IPの設定とインターフェースの開放

```
Switch(config)#interface Loopback 0
Switch(config-if)#ip address 192.168.1.1 255.255.255.0
```

ログインUsernameとPasswordを作成し、vtyに設定。接続方法をSSHに限定。

```
Switch(config)#username Jinnai73 secret cisco
Switch(config)#line vty 0 4
Switch(config-line)#login local
Switch(config-line)#transport input ssh
```

ホスト名、ドメイン名の設定、RSA鍵の作成

```
Switch(config)#hostname tc0001
tc0001(config)#ip domain-name jinnai73.com
tc0001(config)#crypto key generate rsa
The name for the keys will be: tc0001.jinnai73.com
Choose the size of the key modulus in the range of 360 to 2048 for your
  General Purpose Keys. Choosing a key modulus greater than 512 may take
  a few minutes.

How many bits in the modulus [512]: 2048
% Generating 2048 bit RSA keys ...[OK]
```

SSHv2に限定

```
tc0001(config)#ip ssh version 2
```

特権パスワードの設定

```
tc0001(config)#enable secret cisco
```

# 4. 解説

UsernameとPasswordはコンソール接続、リモート接続で共通のものを`username secret`コマンドで設定します。`password`コマンドでも設定できますが、セキュリティ上`username secret`を使用することが推奨されます。この辺りは前回書きました。
http://qiita.com/jinnai73/items/a240bf2bc1325b46edfe
パスワードを作成したら`login local`コマンドでlineに適用します。Telnet接続を禁止するため、`transport input`コマンドでsshでのログインのみ許可します。

```
Switch(config)#username Jinnai73 secret cisco
Switch(config)#line vty 0 4
Switch(config-line)#login local
Switch(config-line)#transport input ssh
```

続いてSSH接続に必要なRSA鍵を作成します。RSA鍵を確認するコマンドは`show crypto key mypubkey rsa`です。

```
Switch#show crypto key mypubkey rsa

Switch#
```

何も入っていませんね。鍵を生成するコマンドは`crypto key generate rsa`ですが、生成する前提としてスイッチのFQDN、つまりホストとドメイン名が決まっている必要があります。デフォルトではドメイン名が設定されていないため、以下のようなエラーが出ます。

```
Switch(config)#crypto key generate rsa
% Please define a domain-name first.
```

ドメイン名の設定は`ip domain-name`コマンド、確認は`show hosts`で行えます。

```
Switch#show hosts
Default domain is not set
Name/address lookup uses static mappings

Codes: u - unknown, e - expired, * - OK, ? - revalidate
       t - temporary, p - permanent

Host                      Port  Flags      Age Type   Address(es)
Switch#
```

それではホスト名とドメイン名を設定しましょう。

```
Switch(config)#hostname tc0001
tc0001(config)#ip domain-name jinnai73.com
tc0001(config)#end
tc0001#show hosts
Default domain is jinnai73.com
Name/address lookup uses static mappings

Codes: u - unknown, e - expired, * - OK, ? - revalidate
       t - temporary, p - permanent

Host                      Port  Flags      Age Type   Address(es)
tc0001#
```

設定できました。これでRSA鍵も生成可能になります。`crypto key generate rsa`コマンドで生成、鍵長は2048 bitを指定します。

```
tc0001(config)#crypto key generate rsa
The name for the keys will be: tc0001.jinnai73.com
Choose the size of the key modulus in the range of 360 to 2048 for your
  General Purpose Keys. Choosing a key modulus greater than 512 may take
  a few minutes.

How many bits in the modulus [512]: 2048
% Generating 2048 bit RSA keys ...[OK]

tc0001(config)#
```

警告メッセージにもある通り、2048 bitでは約1分ほど時間がかかりますが、2016年現在1024 bit以下のRSAは（少なくともインターネット上では）使わない方が良いというのは異論が無いところでしょう。

この時点でSSHでの接続が可能になります。テストのため自分自身に接続してみましょう。

```
tc0001#ssh -v 2 -l Jinnai73 192.168.1.1
tc0001#ssh -v 2 -l Jinnai73 192.168.1.1

Password:

tc0001>
```

できました。sshのv1はセキュリティに問題があるため禁止しましょう。一度ログアウトして、sshをv2に限定したのちに、v1での接続ができないことを確認します。

```
tc0001(config)#ip ssh version 2
tc0001(config)#exit
tc0001#ssh -v 1 -l Jinnai73 192.168.1.1

[Connection to 192.168.1.1 aborted: error status 0]
tc0001#
```

うまくできています。この状態ではSSHアクセスした後に特権モードに入ろうとしてもできないため、`enable secret`で特権パスワードの設定もしておきましょう。

# 5. おわりに

思ったよりボリュームが増えてしまいました。明日ももう少し、機器管理を勉強しようと思います。