21.4. ssh クライアントの使用方法とホスト認証

21.4.1. ssh クライアントの使用方法

ここでは、Turbolinux 11 Server に収録されている ssh クライアントを使用して、SSH サーバーの稼働しているリモートホストにログインする方法を解説します。ssh コマンドの書式は以下の通りです。

$ ssh [option] [user@]hostname

例えば、ユーザー taro が、リモートホスト sshsvr にログインするには、次のコマンドを実行します。

$ ssh taro@sshsvr

もし、現在クライアントでログイン中のユーザー名と同じユーザー名でリモートホストにログインするのであれば、user@ の指定は省略することができます。単に次のコマンドを実行するだけです。

$ ssh sshsvr

ティップ

Turbolinux 11 Server の ssh クライアントは、SSH v1 と SSH v2 の両方のバージョンに対応していますが、標準では SSH v2 で接続します。SSH v1 のみをサポートする SSH サーバーへログインする際には、-1 オプションを使用できます。どちらのバージョンを標準で使用するかは、ssh クライアントの設定ファイルである /etc/ssh/ssh_config の記述に依存します。

リモートホスト sshsvr に接続すると、次のようなメッセージが表示されます。

The authenticity of host 'sshsvr (192.168.0.1)' can't be established.
RSA key fingerprint is 28:d2:80:56:a3:3c:bf:5b:58:f6:68:97:7d:7d:68:db.
Are you sure you want to continue connecting (yes/no)? yes

このメッセージが表示されるのは最初の接続のときだけです。次のログイン時からは表示されません。正しいリモートホストへの接続であるならば、yes を入力します。詳細については、項21.4.2 を参照してください。ここで yes を入力すると、以下のようにパスワードを要求されます。

Warning: Permanently added 'sshsvr,192.168.0.1' (RSA) to the list of known hosts.
taro@sshsvr's password:

パスワードを入力し、リモートホストにログインします。これで、クライアントとリモートホストとの通信経路は SSH により暗号化されます。

注意

Turbolinux 11 Server の OpenSSH は、root でのログインをデフォルトで禁止しています。root で作業するには、一般ユーザーでログインした後に、su - コマンドを実行して root になる必要があります。なお、sshd の設定ファイルである /etc/sshd/sshd_config の PermitRootLogin の値を yes に変更し、sshd を再起動することで root でのログインを許可することができますが、この設定は推奨されていません。

また、ssh では、リモートホストにログインするだけでなく、リモートホスト側で実行したコマンドの結果だけをクライアントのコンソールに表示することもできます。例えば、以下のように実行すれば、sshsvr 上で ls -l ~ コマンドを実行した結果が表示されます。

$ ssh taro@sshsvr 'ls -l ~'
taro@sshsvr's password:
total 1176
drwx------  3 taro taro    4096 Jul 26 12:32 Desktop
drwx------  2 taro taro    4096 Jul 22 21:32 MyDocument

21.4.2. ホスト認証と暗号化通信の手続き

リモートホストへの初回ログイン時には、以下のメッセージが表示されます。

The authenticity of host 'sshsvr (192.168.0.1)' can't be established.
RSA key fingerprint is 28:d2:80:56:a3:3c:bf:5b:58:f6:68:97:7d:7d:68:db.
Are you sure you want to continue connecting (yes/no)? yes

このメッセージは、リモートホストの SSH v2 用 RSA 公開鍵(/etc/ssh/ssh_host_rsa_key.pub)をクライアントの ~/.ssh/known_host ファイルへ登録するかどうかを確認するメッセージです。yes を入力すると、以下のようにリモートホストの SSH v2 用 RSA 公開鍵が、クライアントの ~/.ssh/known_host ファイルに登録されます。

sshsvr,192.168.0.1 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAsGLmvVUeus48lWsQs8u+WU1
ta7FGbqmAq6AeGA+O4IBT4Agztdax6b2AQipMBFu1vAB1upaKfYWLG4uyw0HBNAHTQIq7UP3JFsDz5N/2x
hWeZFqKXqL22bcAyt32V7vO1WpFVL3uURi3RIpTTthCgv/5ijm+buD1FY9d+KR9AtE=

ティップ

Turbolinux 11 Server の ssh クライアントは、標準で SSH v2 用 RSA 公開鍵を使用します。SSH v2 用の DSA 公開鍵(/etc/ssh/ssh_host_dsa_key.pub)を使用したい場合は、ssh クライアントの設定ファイルである /etc/ssh/ssh_config ファイルに以下の行を追記します。

HostKeyAlgorithms    ssh-dss,ssh-rsa

なお、/etc/ssh/ssh_config は、システムデフォルトの設定ファイルとなりますので、ユーザーが個別に設定をするのであれば、/etc/ssh/ssh_config を ~/.ssh/config ファイルとしてコピーし、このファイルを編集します。

SSH では、このようにして登録したリモートホストの公開鍵を使用することで暗号化通信を実現しています。どのような手続きで通信を暗号化しているのかを簡単な図にまとめると以下のようになります。

SSH が採用している公開鍵暗号方式では、公開鍵と秘密鍵のペアを使用して暗号化を行います。公開鍵とはデータの暗号化のみを行う鍵であり、秘密鍵はデータの復号化のみを行う鍵です。公開鍵は、誰に渡しても構いませんが、公開鍵により暗号化されたデータを復号化できるのは、ペアとなる秘密鍵のみです。したがって、秘密鍵は厳重に管理し、他人の手に渡してはいけません。これらの鍵のペアは、リモートホストではじめて SSH サーバーを起動したときに自動的に生成されます。すでに解説したように、リモートホストへの初回ログイン時には、そのリモートホストの公開鍵をクライアントの ~/.ssh/known_hosts ファイルに登録するかどうかを確認するメッセージが表示されますします。yes を入力すると、クライアントは取得した公開鍵を使用して、リモートホストとの通信を暗号化するための共通鍵を暗号化します。共通鍵は SSH セッション毎にクライアント側で生成されます。そして、暗号化した共通鍵をリモートホストへ送ります。リモートホスト側では、送られた共通鍵を秘密鍵で複号化し、それ以後は、複号化した共通鍵によって通信を暗号化します。ここで、暗号化された共通鍵を複号化できるのは、公開鍵とペアの秘密鍵を持っているホストだけであることに注意してください。もし、秘密鍵が異なれば、共通鍵の複号化はできないため、この SSH セッションは確立されません。このように SSH は、公開鍵暗号の仕組みを利用して接続するリモートホストを認証し、実際の通信には共通鍵暗号を使用することで安全で、かつ処理の速い暗号化通信を実現できるように設計されています。

しかし、リモートホストへの初回ログイン時に公開鍵を登録するときは、接続しているリモートホストが正当なホストであるかどうかを判断することができません。この問題を回避するために、公開鍵のフィンガープリントを利用できます。表示されたメッセージを確認すると、以下のようなフィンガープリントの行が含まれています。

RSA key fingerprint is 28:d2:80:56:a3:3c:bf:5b:58:f6:68:97:7d:7d:68:db.

このフィンガープリントと接続しようとしているリモートホストの公開鍵のフィンガープリントとを比較し、同じであれば yes を入力して ~/.ssh/known_host ファイルに公開鍵を登録します。そのためには、表示されたフィンガープリントが正しいかどうかをリモートホストの管理者に確認しなければなりません。なお、公開鍵のフィンガープリントは、以下のコマンドで確認できます。

# ssh-keygen -l
Enter file in which the key is (/root/.ssh/id_rsa): /etc/ssh/ssh_host_rsa_key.pub
1024 28:d2:80:56:a3:3c:bf:5b:58:f6:68:97:7d:7d:68:db /etc/ssh/ssh_host_rsa_key.pub

この例では、Turbolinux 11 Server の ssh クライアントが標準で使用する SSH v2 用 RSA 公開鍵 のフィンガープリントを確認していますが、SSH v2 用 DSA 公開鍵のフィンガープリントを確認するのであれば、/etc/ssh/ssh_host_dsa_key.pub を指定します。

つまり、公開鍵を登録する確認メッセージが表示されたときは、以下の手続きを行った後に登録することが推奨されます。

  1. 公開鍵登録の確認メッセージが表示されたら、no を入力して中断する

  2. メッセージ中のフィンガープリントを控え、リモートホストの管理者にフィンガープリントの値が一致しているかどうかを確認する

  3. 一致した場合は、再度リモートホストへ接続し、そのホストの公開鍵を ~/.ssh/known_host ファイルに登録する

このような手順を踏むことで、正当なリモートホストの公開鍵を ~/.ssh/known_host に登録することができます。また、登録した公開鍵は、次にそのホストへログインするときに、リモートホスト上の公開鍵と比較されます。公開鍵が一致すれば、クライアントは正しい公開鍵を持つホストへログインを試みていることが証明できます。もし、公開鍵が一致しない場合は、以下のメッセージが表示され、ログインは拒否されます。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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
6a:d1:e4:7a:30:ec:96:cb:cf:68:89:01:0b:97:cb:34.
Please contact your system administrator.
Add correct host key in /home/taro/.ssh/known_hosts to get rid of this message.
Offending key in /home/taro/.ssh/known_hosts:1
RSA host key for turbossh has changed and you have requested strict checking.
Host key verification failed.

このようなメッセージが表示されたときは、リモートホストの鍵が本当に変更されたかどうかをサーバーの管理者に問い合わせる必要があります。実際に、OS の再インストールが行われていたり、鍵のペアを生成し直したという事実が確認できたのであれば、~/.ssh/known_host をテキストエディタで開き、登録されている当該ホストの公開鍵を削除します。これにより、再度、公開鍵登録の確認メッセージが表示されるようになります。