運用・管理 / Secure Shell
Secure Shell(SSH)は、暗号/認証技術を利用してネットワーク経由の端末ログインなどを安全に行うためのプロトコルです。通信内容の暗号化により盗聴や改ざんを防ぐほか、サーバーやユーザーの認証機能によってなりすましを防ぐ効果もあります。また、サブアプリケーションであるSCP(Secure CoPy)やSFTP(Secure File Transfer Protocol)によって安全なファイル転送を行ったり、TCPフォワーディング(ポートフォワーディング)機能を用いて簡易的なVPNを構築したりすることもできます。
本製品は、SSHバージョン2に対応したサーバー機能とクライアント機能を備えています(IPv4、IPv6両対応)。認証方式はパスワード認証と公開鍵認証(RSA、ECDSA、ED25519)をサポートしています。
SSHサーバー
SSHサーバー機能は初期設定では無効です。なお、起動時にAMFネットワーク未検出時の拡張動作が機能した場合、SSHサーバーは有効化されますが、その設定はAMFネットワーク未検出時の一時的な設定であるため、運用上の必要性に応じて無効化してください。
以下では、本製品をSSHサーバーとして動作させるための基本設定について説明します。SSHはIP上で動作するため、IPの設定までは済んでいるものとします。
ここでは、初期設定のユーザーである「manager」と、新規に登録したユーザー「admin」に対し、SSHログインを許可するよう設定します。managerはパスワード認証のみ、adminはパスワード認証と公開鍵認証の両方を使えるものとします。
- 権限レベル15の新規ユーザー「admin」を登録します。
awplus(config)# username admin privilege 15 password adkf8KH!
- SSHサーバーを有効化します。
awplus(config)# service ssh
- SSHサーバーの有効化直後は、SSHログインが可能なユーザーは存在しません。SSHログインを許可するには、ssh server allow-usersコマンドを使います。ここでは、初期設定の管理者ユーザー「manager」と新規作成した管理者ユーザー「admin」にSSHログインを許可するよう設定します。
awplus(config)# ssh server allow-users manager awplus(config)# ssh server allow-users admin
- 以上でmanagerとadminがパスワード認証でログインできるようになりました。続いて、adminに対する、公開鍵認証の設定を行います。クライアントPC上において、SSHソフトウェア付属のユーティリティーなどでユーザー「admin」の公開鍵ペアを作成してください。公開鍵のアルゴリズムには、RSA、ECDSA、ED25519などがありますが、ここではRSA鍵を使うものとします。
- PC上で作成したユーザー「admin」用のRSA公開鍵をダウンロードします。ここでは、公開鍵がpchost.example.comというコンピューター上の「admin_id_rsa.pub」という名前のファイルに格納されているものとし、同コンピューターからSCPプロトコルでローカルファイルシステムに転送(リモートコピー)するものとします。
awplus(config)# end awplus# copy scp://pcuser@pchost.example.com/tmp/admin_id_rsa.pub flash Enter destination file name [admin_id_rsa.pub]: ↓ pcuser@pchost.example.com's password: XXXXXXXX ↓ (実際には表示されません) Copying.. Successful operation
- adminのRSA公開鍵を「信頼済みユーザー公開鍵リスト」(Authorized Keysデータベース)に登録します。これでadminは、公開鍵認証によるログインができるようになります。
awplus# configure terminal Enter configuration commands, one per line. End with CNTL/Z. awplus(config)# crypto key pubkey-chain userkey admin admin_id_rsa.pub
設定は以上です。
SSHサーバーへの接続を特定のホストからだけに制限することもできます。これには、ssh server allow-usersコマンドの省略可能な第2パラメーターHOSTNAME-PATTERNを使います。ホストによるアクセス制限はSSHユーザーごとに設定します。たとえば、SSHユーザー「manager」に対し、192.168.10.186からのみ接続を許可するには、次のようにします。
awplus(config)# ssh server allow-users manager 192.168.10.186
IPアドレスを範囲指定することもできます。たとえば、SSHユーザー「manager」に対し、192.168.10.0/24の範囲からのみ接続を許可するには、次のようにします。アスタリスク(*)はワイルドカードの指定で、任意の文字列にマッチします。
awplus(config)# ssh server allow-users manager 192.168.10.*
HOSTNAME-PATTERNをホスト名で指定することもできますが、その場合は次の追加設定が必要です。
- 使用するDNSサーバーの設定(ip name-serverコマンド。初期状態では未設定)
- DNSへの問い合わせ機能の有効化(ip domain-lookupコマンド。初期状態で有効)
- ログイン元ホスト名の逆引き有効化(ssh server resolve-hostsコマンド。初期状態では無効)
たとえば、delirium.example.comという名前を持つホストからのみ、ユーザー「admin」でのログインを許可するには、次のようにします。
awplus(config)# ip name-server 172.16.10.8 awplus(config)# ssh server resolve-hosts awplus(config)# ssh server allow-users admin delirium.example.com
SSHサーバーの設定や状態はshow ssh serverコマンドで確認できます。
awplus# show ssh server
作成したホスト鍵の情報はshow crypto key hostkeyコマンドで確認できます。
awplus# show crypto key hostkey Type Bits Fingerprint --------------------------------------------------------------- rsa 3072 SHA256:wPo/qzwNsGLKnlVj9+U48gZQxHvtntmhmFxMqI5jd6M ecdsa 256 SHA256:1NJi1rtrI3uT2JPaWW6v/UW8xC66NWxs/MSrvdKppXs ed25519 256 SHA256:a0Tsz1PHpIIl9YDpsPYCzMiX13FDEaiO8uqblV+WqZc awplus# show crypto key hostkey rsa ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDKtnCsVoyQvP8LAoOp0OdiW118z8tG95iwTlo14IDH GyErnCC2OinCFwMH/nW/8qfuEpG/yQdI7cXVH6euTz4XnaL38gxsU02M1vyzCJv0DjKiI+L31g/UGCWw rZCrG9+NKTLbi6xbnmlxWruE4hhBYZi28lCnSIVADv3YadRLdcGMspnI6MEw4UTlZQb8y51Hjy2Io2cH a1aacYsgfxVLJ4hH8L79+UewM3YC9QAJUjJ/vyPHikxtnC6Aqpm30Pbd/S4fcs1Uix0xwDOmH2iw0tnA bYgEeoJnq2uiR3KvIWPeHdLbf4CCwsIARKPKE1Qg+EdUowbeEO6tEDePNCOJ
ユーザーの公開鍵の情報はshow crypto key pubkey-chain userkeyコマンドで確認できます。
awplus# show crypto key pubkey-chain userkey admin No Type Bits Fingerprint Comment ------------------------------------------------------------------------------- 1 rsa 4096 SHA256:iJ18qK5lVV3sT/jMvflfAInORmLgsf3L5TmDZt3J admin@pc awplus# show crypto key pubkey-chain userkey admin 1 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCX5FS6ZRCR/Wkl3PiFxum0czn1QCViNUZoTiwbYWOW FCtg57erbjaC3OzsWWtHiC+q/pIahCvAGo8XJWBW1F0ckPWBIkhLmyLaxwtAEPLY/KT2lhDen9TJt3Uv nNNQImTL5ZA1+c3JvNjEsSwUun3mi6gLG/QpUsXSwnz6m5J6AJbnEWLnniYBlQHUelBgTmh6W9eDjfCW SNxvQco9aHpgQOg2vTAgxboGCAiiVSgrxAYR5SxUGnshuLw8d3mdQSI6W08BvTFA9QzuYaa4eBnf43Of utA7yeVQ3m/2845CKMjrgCvvQ7isxhK1qhHuSjcGR8H58mCf75V7Wnut+o3ksc8Ts4m1BK5JEE5BWV7H Zxx3pN01L1RgxNqqTUWcMpi53BDqhBaSxDmciUPW3ZzFkLs2V6oCZ82jl/KCPCOmENcVHjCU80l4YaOx 0OEyn1aYIbqlOC1+lBNGIpUByvfRx1W13TztrIXqqPwnsn5dsdcZlqm8jtOzf39vwD37tdH3F3bOL3ei xBlDlDl87q43sw5Y+RHRz/n7/nxRTnqbFEvnWf8f09bShFRbGWjm3NmbVq+b6NRRsaLgw7qRqOsLf7TG TQGMw+rpEpaAaAIFNd5Yn9pVOKYMNt+ibsNmkGMWF/j+D/aPh/PZSXidbo5mouMFnKvUXebX1cGhEQ+Q 2w== admin@pc
現在ログインしているユーザーの一覧を確認するには、show usersコマンドを実行します。
awplus> show users
確立中のSSHセッションはshow sshコマンドで確認できます。
awplus# show ssh
Secure Shell Sessions:
ID Type Mode Peer Host Username State Filename
------------------------------------------------------------------------------
3402 ssh server 192.168.20.2 admin open
確立中のSSHセッションを切断するには、clear sshコマンドを使います。
awplus# clear ssh 3402
SSHクライアント
本製品には、SSHクライアント機能を持つコマンドとして次の2つが用意されています。- sshコマンド
SSHサーバーにログインしたり、SSHサーバー上でコマンドを実行させたりするときに使います。
- copyコマンド
SSHの付加サービスであるSCP(Secure CoPy)やSFTP(Secure FTP)を利用して、SSHサーバーとの間でファイルをリモートコピーするときに使います。SCPではアップロードとダウンロードの両方が、SFTPではダウンロードのみが可能です。
以下では、それぞれの使い方について解説します。SSHはIP上で動作するため、IPの設定までは済んでいるものとします。なお、copyコマンドについては、「運用・管理」の「ファイル操作」で詳しく説明しているため、ここでは簡単な説明にとどめます。
sshコマンド
sshコマンドは、SSHサーバーにログインしたり、SSHサーバー上でコマンドを実行させたりするためのコマンドです。SSHサーバーへのログイン
SSHサーバーにログインするには、次のようにします。ここでは、SSHサーバー192.168.10.5にユーザー名zeinでログインしています。
awplus# ssh user zein 192.168.10.5 The authenticity of host '192.168.10.5 (192.168.10.5)' can't be established. RSA key fingerprint is SHA256:32nmQJz0Gpc2EqMIDlb88qOypLOIUYmYLlNC3GTGcZU. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes ↓ Warning: Permanently added '10.0.0.2' (RSA) to the list of known hosts. zein@192.168.10.5's password: XXXXXXXX ↓ (実際には表示されません) Last login: Wed Sep 14 14:01:55 2011 from awplus Welcome to Darwin! [1488] zein@bird:~%
上の例にもありますが、初めてSSHサーバーに接続したときは、ログイン認証の前に次のようなメッセージが表示されます。
The authenticity of host '192.168.10.5 (192.168.10.5)' can't be established. RSA key fingerprint is SHA256:32nmQJz0Gpc2EqMIDlb88qOypLOIUYmYLlNC3GTGcZU. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])?
これは、SSHサーバーから受け取ったホスト鍵が、本製品の「確認済みSSHサーバーリスト」(Known Hostsデータベース)に未登録であることを示すメッセージです。
「key fingerprint is ...」の部分にホスト鍵のフィンガープリントが表示されているので、これを見て該当サーバーに間違いないと判断した場合は、「Are you sure you want to continue connecting (yes/no/[fingerprint])?」(接続を続行してもよいか?)の問いに対して、「yes」と入力してEnterキーを押してください。
接続先が正しいサーバーかどうか確認できず、接続を続行したくない場合は「no」を入力してEnterキーを押せば、sshコマンドは中断してコマンドプロンプトに戻ります。
「yes」を入力して接続を続行した場合は、続いて次のメッセージが表示されます。
Warning: Permanently added '192.168.10.5' (RSA) to the list of known hosts.
これは、該当サーバーのホスト鍵をKnown Hostsデータベースに登録したという意味です。次回以降同じサーバーに接続したときは、すでにKnown Hostsデータベースに該当サーバーのホスト鍵が登録されているため、次のように確認メッセージは出なくなります。
awplus> ssh user zein 192.168.10.5
zein@192.168.10.5's password:
ホスト鍵をKnown Hostsデータベースに登録したのち、サーバー側でホスト鍵が変更された場合は、該当サーバーへの接続時に次のようなメッセージが表示されます。
awplus# ssh 192.168.10.5 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that the RSA host key has just been changed. The fingerprint for the RSA key sent by the remote host is SHA256:BCoN+EMu4w0ZjnVID6lXSk8XnN+qllrJPssumaO7zeY. Please contact your system administrator. Host key for 192.168.10.5 has changed and you have requested strict checking. Host key verification failed. awplus#
これは、SSHサーバーから受け取ったホスト鍵が、本製品のKnown Hostsデータベースに登録されているものと異なっていることを示すメッセージです。悪意を持った第3者が該当サーバーに偽装した別のサーバーを設置している可能性があるため、該当サーバーへの接続を中断して、ユーザーにチェックを求めているのです。
このようなときは、可能であれば該当サーバーの管理者に連絡を取り、ホスト鍵を変更したかどうかを確認します。変更した場合は新しい鍵のフィンガープリントも聞くとよいでしょう。その上で、問題ないと判断した場合は、次のようにして対処します。
- show crypto key pubkey-chain knownhostsコマンドを実行して、Known Hostsデータベースの内容を表示し、古いホスト鍵の鍵番号を調べます。ここでは、5番がそれのようです。
awplus# show crypto key pubkey-chain knownhosts No Hostname Type Fingerprint --------------------------------------------------------------------------- 1 afrika.example.c rsa SHA256:OymhOr5zFTXvB4wrXg2BZJsRRscfzXM3bIbOhik1ZOk 2 192.168.10.2 rsa SHA256:I3Tbsf+kH0PWeOXyMTNOTLgkz5woddKO8cPlH4RzINQ 3 192.168.20.2 rsa SHA256:kfzd8fgJbyPp5z4o4Mk7cJUCEgvOFvsaw/8pcYbXLPo 4 172.16.10.3 rsa SHA256:KNYz1X4IkC27yyrdwv9bLh4gJtjLHD4XXp6OgxupGJU 5 192.168.10.5 rsa SHA256:32nmQJz0Gpc2EqMIDlb88qOypLOIUYmYLlNC3GTGcZU 6 10.100.10.100 rsa SHA256:yFI5+dCYk2SnVCOQ03UD2o/DP3Jz+RUrlfMq0p8w/m8
- crypto key pubkey-chain knownhostsコマンドをno形式で実行し、Known Hostsデータベースから古いホスト鍵の情報を削除します。
awplus# configure terminal Enter configuration commands, one per line. End with CNTL/Z. awplus(config)# no crypto key pubkey-chain knownhosts 5 awplus(config)# end
- sshコマンドを実行して、再度該当サーバーに接続します。今度はKnown Hostsデータベースにホスト鍵が登録されていないので、初回接続時と同じように接続続行の確認プロンプトが出ます。サーバー管理者から教わったフィンガープリントと表示されたフィンガープリントを比較し、正しいサーバーであることを確認したら「yes」と答えてログインします。
awplus# ssh user zein 192.168.10.5 The authenticity of host '192.168.10.5 (192.168.10.5)' can't be established. RSA key fingerprint is SHA256:BCoN+EMu4w0ZjnVID6lXSk8XnN+qllrJPssumaO7zeY. Are you sure you want to continue connecting (yes/no)? yes ↓ Warning: Permanently added 'localhost' (RSA) to the list of known hosts. zein@192.168.10.5's password:
- これで、新しいホスト鍵がKnown Hostsデータベースに登録されたので、次回以降は確認メッセージがでなくなります。
これまでの例では、初回接続時にホスト鍵の確認を求めるメッセージが表示されていましたが、あらかじめホスト鍵をKnown Hostsデータベースに登録しておけば、この手順を省くことができます。これには、crypto key pubkey-chain knownhostsコマンドを通常形式で実行します。
awplus(config)# crypto key pubkey-chain knownhosts 192.168.10.5 rsa 192.168.10.5 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDH2wYiMPwJEVxtgxgsIdbYc0XZUWYTm+V Zb8BmH7RUriJcLqYFYSxd/0PPfmy33JauqaPAmPttqyWVgOE+aakGC2CtaF7kTr5ZYI9Qfd1scVQVkekWpXK XVye0GYDqzHrSUcyhjbUlnNiQSWjnaA1drHCoGmgZl0yZ0OlWchVyxw== Are you sure you want to add this public key (yes/no)? yes ↓
このコマンドを実行すると、指定したサーバーに接続してホスト鍵を取得し、鍵の内容を表示した上で、確認プロンプトを出します。ここで「yes」と答えれば、該当サーバーのホスト鍵をKnown Hostsデータベースに事前登録できます。
SSHサーバー上でのコマンド実行
SSHサーバー上でコマンドを実行させ、その結果を端末画面に表示させるには、sshコマンドの最終パラメーターとしてサーバー上で実行させるコマンド行を指定します。たとえば、次の例では、SSHサーバー10.100.10.100上でユーザーzeinに「netstat -an -f inet」というコマンド行を実行させ、結果を本製品の管理端末上に表示させています。
awplus# ssh user zein 10.100.10.100 netstat -an -f inet zein@10.100.10.100's password: XXXXXXXX ↓ (実際には表示されません) Active Internet connections (including servers) Proto Recv-Q Send-Q Local Address Foreign Address (state) tcp4 0 0 10.100.10.100.22 10.100.10.1.38199 ESTABLISHED tcp4 0 0 127.0.0.1.1033 127.0.0.1.976 ESTABLISHED tcp4 0 0 127.0.0.1.976 127.0.0.1.1033 ESTABLISHED tcp4 0 0 *.22 *.* LISTEN tcp4 0 0 *.* *.* CLOSED tcp4 0 0 *.80 *.* LISTEN tcp4 0 0 127.0.0.1.8005 *.* LISTEN tcp46 0 0 *.8009 *.* LISTEN tcp4 0 0 127.0.0.1.5432 127.0.0.1.49154 ESTABLISHED tcp4 0 0 127.0.0.1.49154 127.0.0.1.5432 ESTABLISHED tcp46 0 0 *.8080 *.* LISTEN tcp4 0 0 *.5432 *.* LISTEN tcp4 0 0 *.* *.* CLOSED tcp4 0 0 127.0.0.1.1033 127.0.0.1.1019 ESTABLISHED tcp4 0 0 127.0.0.1.1019 127.0.0.1.1033 ESTABLISHED tcp4 0 0 127.0.0.1.631 *.* LISTEN tcp4 0 0 *.23 *.* LISTEN tcp4 0 0 *.139 *.* LISTEN tcp4 0 0 127.0.0.1.1033 *.* LISTEN ... awplus#
copyコマンド
copyコマンドは、ローカルファイルのコピーだけでなく、ネットワーク上のリモートホストとの間でファイルをリモートコピーする場合にも使用できます。copyコマンドでは、リモートコピー用のプロトコルとしてTFTP、HTTP、SCP、SFTPの4種類を使用できますが、ここでは、SCPとSFTPについてのみ簡単に説明します。copyコマンドの詳細については、copyコマンドのページおよび「運用・管理」の「ファイル操作」をご覧ください。SCPによるリモートコピー
SCP(Secure CoPy)を用いる場合、SSHサーバーからSSHクライアントへのダウンロードと、SSHクライアントからSSHサーバーへのアップロードの両方が可能です。SCPを利用してSSHサーバーからファイルをダウンロードするには、次のようにします。
awplus# copy scp://zein@10.100.10.100/tmp/testtest.cfg flash Enter destination file name [testtest.cfg]: zein@10.100.10.100's password: XXXXXXXX ↓ (実際には表示されません) Copying.. Successful operation
SCPを利用してSSHサーバーにファイルをアップロードするには、次のようにします。
awplus# copy testtest2.cfg scp://zein@10.100.10.100/tmp/ Enter destination file name [testtest2.cfg]: zein@10.100.10.100's password: XXXXXXXX ↓ (実際には表示されません) Successful operation
SFTPによるリモートコピー
SFTP(Secure SFTP)を用いる場合は、SSHサーバーからSSHクライアントへのダウンロードだけが可能です。SFTPを利用してSSHサーバーからファイルをダウンロードするには、次のようにします。
awplus# copy sftp://zein@10.100.10.100/tmp/aaaaa.txt flash Enter destination file name [aaaaa.txt]: zein@10.100.10.100's password: XXXXXXXX ↓ (実際には表示されません) Copying.. Successful operation