VTYアクセス

コンソール接続でCiscoルータやCatalystスイッチを管理できますが、そのためには管理したい機器と直接コンソールケーブルで接続する必要があります。コンソール接続では、離れた場所にある機器を管理するには効率がよくありません。TelnetやSSHなどのプロトコルを利用した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アクセスを受け付ける仮想的なインタフェースのことでライン番号は、デフォルトで0~4の5つです。現在のIOSでは、さらに拡張してより多くのVTYラインを扱うことができます。1つのデバイスで複数のVTYアクセスを受け付けることができ、その際のVTYライン番号の割り当ては、VTYアクセスを受けた時点で空いている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>

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コマンドでユーザ名とパスワードの認証を有効化します。

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

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

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

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

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

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

#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#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          

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

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

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

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

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

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

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> 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 <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であることが確認できます。