VTYアクセスとは?

VTYアクセスとは、TelnetやSSHによるCLIベースのリモートアクセスを意味します。コンソール接続でCiscoルータやCatalystスイッチを管理できますが、そのためには管理したい機器と直接コンソールケーブルで接続する必要があります。コンソール接続では、離れた場所にある機器を管理するには効率がよくありません。離れた場所にある機器を効率よく管理するにはVTYアクセスを行います。

Telnetは、TCPポート番号23番を利用します。Telnetはシンプルなプロトコルで、通信の暗号化を行いません。そのため、通信を盗聴されると悪意を持つユーザにログインするためのユーザID/パスワードのアカウント情報が漏れてしまうリスクがあります。一方、SSHはTCPポート番号22番を利用します。公開鍵暗号方式に基づいて通信の暗号化を行います。SSHのデータを盗聴されてもアカウント情報などが漏れてしまう心配はありません。

CiscoルータおよびCatalystスイッチでリモートからのTelnetやSSHのVTYアクセスを受け入れるには、あらかじめVTYラインの設定をしておく必要があります。VTYライン上で受け入れるプロトコルは、transport inputコマンドで指定します。transport inputコマンドで指定できるプロトコルの例は以下のようになります。

Router(config)#line vty 0 4
Router(config-line)#transport input ?
  all      All protocols
  lapb-ta  LAPB Terminal Adapter
  lat      DEC LAT protocol
  none     No protocols
  pad      X.3 PAD
  rlogin   Unix rlogin protocol
  ssh      TCP/IP SSH protocol
  telnet   TCP/IP Telnet protocol
  udptn    UDPTN async via UDP protocol
  v120     Async over ISDN

さまざまなプロトコルを指定することができますが、一般的にはtelnetまたはsshを利用します。VTYアクセスとしてtelnetのみを受け入れたいときにはtransport input telnetを指定します。また、sshのみを受け入れるのであればtransport input sshを指定します。複数のプロトコルを指定することも可能です。

リモートからTelnetやSSHによりVTYアクセスすると、VTYラインにログインすることになります。VTYラインは、VTYアクセスを受け付ける仮想的なインタフェースのことでライン番号は、デフォルトで0~4の5つです。現在のIOSでは、さらに拡張してより多くのVTYラインを扱うことができます。1つのデバイスで複数のVTYアクセスを受け付けることができ、その際のVTYライン番号の割り当ては、VTYアクセスを受けた時点で空いているVTYライン番号を使います。認証を設定しているラインと設定していないラインが混在すると、セキュリティ上好ましくないので基本的にすべてのVTYラインに対してきちんと認証を設定してください。

図 複数のVTYアクセス

CCNA試験で重要

CCNA試験では、VTYアクセスについての問題が頻出します。以降のVTYアクセスの設定のコマンドはソラで打てるぐらいになっておいてください。試験だけでなく、実際にルータを扱う上でも必ずと言っていいほどVTYアクセスの設定が必要です。

Telnetアクセスの設定

リモートからのVTYアクセスを受け入れるには、基本的に認証を行います。Telnetのアクセスの場合は、VTYライン上のパスワードによる認証やルータで定義しているユーザ名/パスワードによる認証を行うことができます。

VTYライン上で認証を有効にするコマンドがloginコマンドです。loginコマンドでは、VTYラインに設定されているパスワードによる認証を行います。

図 認証の設定(VTYラインのパスワード)

loginコマンドでVTYラインのパスワード認証を有効にしているのに、VTYライン上でパスワードを設定していない場合は、認証できずにVTYアクセスは次のように拒否されることになります。

Password required, but none set

そして、より柔軟な認証を行うには、VTYライン上でlogin localコマンドを入力します。これにより、ルータ上に定義されているユーザ名とパスワードによる認証を行うことができます。

図 認証の設定(ルータ上のユーザ名とパスワード)
外部の認証サーバを利用した認証を行うことも可能です。

なお、VTYライン上でno loginコマンドを入力すると、認証なしにTelnetでVTYアクセス可能です。ですが、ルータのIPアドレスさえわかればだれでもTelnetアクセスできてしまうことになるので、セキュリティを考慮すると推奨できません。

SSHアクセスの設定

ルータでSSHアクセスを受け入れるための設定は次の手順で行います。

  1. ドメイン名、ホスト名の設定
  2. 公開鍵の生成
  3. VTYでのSSHの有効化、認証の有効化
  4. ユーザ名、パスワードの設定

1.ドメイン名、ホスト名の設定

暗号化に利用する公開鍵を生成するために、ルータに一意のドメイン名とホスト名の設定を行います。

ドメイン名、ホスト名の設定

(config)#ip domain name <domain>
(config)#hostname <host>

<domain> : ドメイン名
<host> : ホスト名

2.公開鍵の生成

公開鍵を生成します。コマンドを入力すると、生成する公開鍵のビット長を尋ねられます。適切な鍵のビット長を入力してください。

公開鍵の生成

(config)#crypto key generate rsa

以下は、crypto key generate rsaコマンドによる公開鍵生成の出力例です。

R1(config)#crypto key generate rsa
The name for the keys will be: R1.n-study.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]: 1024
% Generating 1024 bit RSA keys, keys will be non-exportable...[OK]

3.VTYのSSHの有効化、認証の有効化

VTY上でSSHを有効にします。デフォルトでtransport input allなので、特に設定しなくてもSSHは有効化されています。SSHはユーザ名とパスワードによる認証が必要です。login localコマンドでユーザ名とパスワードの認証を有効化します。

VTYのSSHの有効化、認証の有効化

(config)#line vty 0 4
(config-line)#login local
(config-line)#transport input ssh

4.ユーザ名、パスワードの設定

認証に利用するユーザ名/パスワードを設定します。

ユーザ名、パスワードの設定

(config)#username <user> password <password>

<user> : ユーザ名
<password> : パスワード

Ciscoルータ、CatalystスイッチからTelnetを実行

CiscoルータおよびCatalystスイッチはTelnetアクセスを受けるだけでなく、自らTelnetをして他のデバイスにログインすることもできます。他のデバイスにTelnetするには、ユーザEXECモードあるいは特権EXECモードで次のコマンドを入力します。

Telnetでリモートログイン

#telnet {<ip-address>|<host>}

このコマンドにより指定したIPアドレスまたはホスト名に対してTelnetを行います。ホスト名を利用するときにはip hostコマンドやDNSを設定して名前解決ができることが前提です。

なお、Telnetするには「telnet」というコマンド自体を省略することができます。つまり、IPアドレスやホスト名を入力して[Enter]キーを押すと、指定されたIPアドレスまたはホスト名に対してTelnetを行います。

ここで、注意したいことがあります。間違ったコマンドを入力すると、そのコマンドをホスト名として解釈し、Telnetするために名前解決を行おうとすることです。

Router#aaa  
Translating "aaa"...domain server (255.255.255.255)
 (255.255.255.255)
Translating "aaa"...domain server (255.255.255.255)
% Unknown command or computer name, or unable to find computer address          

「aaa」という間違ったコマンドを入力すると、Ciscoデバイスは「ホスト名「aaa」に対するTelnetをしなさい」と解釈して、「aaa」の名前解決を行うためにデフォルトではブロードキャストで行おうします。この動作で設定作業が中断されてしまます。これを防ぐためには、グローバルコンフィグレーションモードで次のコマンドを入力します。

(config)#no ip domain-lookup

no ip domain-lookupを設定した様子が次のログです。

Router#configure terminal 
Enter configuration commands, one per line.  End with CNTL/Z. 
Router(config)#no ip domain-lookup
Router(config)#end     
Router#aaa                                                                      
Translating "aaa"
                                                                                
Translating "aaa"
% Unknown command or computer name, or unable to find computer address          

間違ったコマンドを入力しても、名前解決を行わず、タイムロスがなくなります。設定作業中は、no ip domain-lookupを入れておくことをオススメします。

Ciscoルータ、CatalystスイッチからSSHを実行

CiscoルータおよびCatalystスイッチは、SSHクライアントとして他のデバイスにVTYアクセスすることもできます。SSHクライアントとして他のデバイスにリモートログインするには、ユーザEXECモードまたは特権EXECモードで次のコマンドを利用します。

SSHでリモートログイン

#ssh -l <user> {<ip-address|host-name>}

「-l」はアルファベット小文字のエルです。

このコマンドにより指定したIPアドレスまたはホスト名に対して、指定したユーザ名でSSHのログインを試行します。ホスト名を利用する場合は、telnetコマンドと同様に名前解決が可能であることが前提です。SSHクライアントとして、他のデバイスへログインする際の出力例は、次のようになります。

R2#ssh -l cisco 192.168.1.1

Password:

R1>
sshコマンドには、バージョンの指定や暗号化アルゴリズムなど、他にもさまざまなオプションの指定が可能です。

リモートログイン先のログ出力の有効化(terminal monitor)

CiscoルータやCatalystスイッチにTelnet/SSHでリモートログインしたとき、デフォルトではログが出力されません。リモートログイン先のログを出力したいときには、特権EXECモードでterminal monitorコマンドを入力します。

リモートログイン先のログ出力の有効化

#terminal monitor

terminal monitorの例

terminal monitorコマンドの例を挙げます。以下のログ出力は、R1のコンソールからR2にTelnetしています。terminal monitorコマンドを設定していないと、R2でグローバルコンフィグレーションモードから抜けてもログが出力されません。

R1#telnet 192.168.12.2
Trying 192.168.12.2 ... Open


User Access Verification

Password:
R2>enable
Password:
R2#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R2(config)#exit
R2#

R2で特権EXECモードからterminal monitorコマンドを入力したあとに、グローバルコンフィグレーションモードから抜けるとログが表示されるようになります。もちろん、グローバルコンフィグレーションモードから抜けたとき以外のログも出力されるようになります。

R2#terminal monitor
R2#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R2(config)#exit
R2#
*Mar  1 00:04:42.735: %SYS-5-CONFIG_I: Configured from console by vty0 (192.168.12.1)
R2#

VTYアクセスの中断、再開方法

Ciscoデバイスから他のデバイスにVTYアクセスした場合を考えます。VTYアクセスすると、VTYアクセス先のデバイスのCLIになり、CLIから設定の変更やshowコマンドを実行することができます。VTYアクセスを中止するには、exitもしくはlogoutコマンドを入力すれば元のデバイスのCLIに戻ります。ただし、これでは完全にVTYアクセスが切断されます。

R1>exit 

[Connection to 10.1.1.1 closed by foreign host]
Switch>

VTYアクセスのTelnet/SSHセッションを保持したまま、元のデバイスのCLIに戻ることをVTYアクセスの中断といいます。VTYアクセスを中断するには、[Ctrl+Shift+6]キーを押して、その後に[x]キーを押します。

R1>[Ctrl+Shift+6] x
Switch#  

VTYアクセスを中断した場合、保持しているVTYアクセスを表示するには、show sessionコマンドを使います。

Switch#show session   
Conn Host                Address             Byte  Idle Conn Name 
*  1 10.1.1.1            10.1.1.1               0     2 10.1.1.1
 

「*」は直前のVTYアクセスを表します。その後の数字がセッション番号です。保持しているVTYアクセスを再開するには、resumeコマンドを利用します。

#resume <session-number>

再開するときは、resumeコマンド自体を省略することができます。セッション番号だけ指定すれば、そのセッションを再開することができます。セッション番号も省略した場合は、「*」のついている直前のセッションを再開します。つまり、セッションを中断して元のCLIに戻ってきた、何も入力せずに<Enter>キーを入力すると直前のセッションに戻ります。

Switch#
[Resuming connection 1 to 10.1.1.1 ... ]  
                                                                                
R1>

保持しているVTYアクセスを切断したい場合は、次のコマンドを入力してください。

#disconnect <session-number>

VTYアクセスの確認

VTYアクセスの確認を行うには、主に次のコマンドがあります。

  • show users
  • show session

show usersは自分に対してのVTYアクセスを表示します。そして、show sessionは自分から行っているVTYアクセスを表示します。次のサンプルネットワークでshow usersおよびshow sessionを見てみます。

図 VTYアクセスの確認

まず、R2でshow usersを見ると次のようになります。

R2>show user                                                                    
    Line       User       Host(s)              Idle       Location              
*  0 con 0                idle                 00:00:00                         
  18 vty 0                idle                 00:00:03 10.1.1.1

これを見ると、R2はR1(10.1.1.1)からTelnetされていることがわかります。「18 vty 0」の「18」はコンソールなども含めた全体のライン番号です。VTYライン番号はこの例では「0」を使っています。自分に対してのTelnetを強制的に切断するときは、clear lineコマンドを使います。もし、この例でTelnet接続を切断したいときは、show usersのVTYライン番号を使って

#clear line 18

とコマンドを入力するとR1からR2へのTelnetを強制的に切断できます。

次に、R1でshow sessionを見ると次のようになります。

R1#show session                    
Conn Host                Address             Byte  Idle Conn Name    
*  1 10.1.1.2            10.1.1.2               0     0 10.1.1.2

R1は10.1.1.2(R2)にTelnetしていて、そのセッション番号が1であることが確認できます。

Ciscoのキホン