LinuxでSSH
作成 : 2005/01/02
最初にトラブル解決方法
SSHサーバでのトラブル解決方法
すでにsshdが起動している場合は終了し、デバッグモードでsshdを起動する。 Slackwareでは標準出力に、Fedoraでは/var/log/secureにデバッグ情報が出力される。
# /usr/sbin/sshd -ddd
SSHクライアントでのトラブル解決方法
デバッグモードでsshを起動する。
$ ssh -vvv
SSH サーバへ接続(パスワード認証)
SSHサーバの準備
パスワード認証を許可するよう、sshd_configファイルを修正する。 (デフォルトで許可されている) 修正した後は、sshdを再起動すること。
# /etc/ssh/sshd_config
PasswordAuthentication yes
Linuxクライアントからの接続
sshユーティリティを使って、サーバに接続する。 そのサーバに初めて接続するときは、~/.ssh/known_hostsにサーバの公開鍵を登録してよいか、確認メッセージが表示される。
$ ssh user@10.1.1.1 <--- ユーザuserでリモートホスト10.1.1.1に接続する The authenticity of host '10.1.1.1 (10.1.1.1)' can't be established. <--- ~/.ssh/known_hosts に登録されていないときは、メッセージが表示される RSA key fingerprint is 4d:1a:87:d6:f8:c5:d8:2e:b9:ac:2d:f5:50:d4:35:72. Are you sure you want to continue connecting (yes/no)? yes <--- ~/.ssh/known_hosts に登録してよいなら"yes"を入力 Warning: Permanently added '10.1.1.1' (RSA) to the list of known hosts. user@10.1.1.1's password: (password) <--- リモートホストのユーザのパスワードを入力 Last login: Sun Jan 2 13:02:55 2005 from 10.1.1.2
SSH サーバへ接続(RSA認証[SSHv1]/公開鍵認証[SSHv2])
SSHサーバの準備
RSA認証[SSHv1]/公開鍵認証[SSHv2]を許可するよう、sshd_configファイルを修正する。 (デフォルトで許可されている) 修正した後は、sshdを再起動すること。
# /etc/ssh/sshd_config RSAAuthentication yes <--- SSH v1 PubkeyAuthentication yes <--- SSH v2
パスワード認証も許可している場合は、まずRSA認証[SSHv1]/公開鍵認証[SSHv2]を試して、失敗したらパスワード認証を行うようになる。
SSHクライアント側ユーザの準備
ssh-keygenユーティリティを使って、RSA認証[SSHv1]/公開鍵認証[SSHv2]で使用する鍵のペアを作成する。 SSH v2では、公開鍵~/.ssh/id_rsa.pubと秘密鍵~/.ssh/id_rsaが作成される。
$ ssh-keygen -t rsa <--- rsaを指定 Generating public/private rsa key pair. Enter file in which to save the key (/home/user/.ssh/id_rsa): (Enter) <--- 秘密鍵の名前(そのままEnter) Enter passphrase (empty for no passphrase): (passphrase) <--- 秘密鍵のパスフレーズ Enter same passphrase again: (passphrase) <--- 秘密鍵のパスフレーズ再入力 Your identification has been saved in /home/user/.ssh/id_rsa. <--- 秘密鍵の作成場所 Your public key has been saved in /home/user/.ssh/id_rsa.pub. <--- 公開鍵の作成場所 The key fingerprint is: 4a:9d:f4:9e:09:80:c5:5e:b6:f6:4b:6d:a2:d7:9e:1a user@xxxx
SSH v1では、公開鍵~/.ssh/identity.pubと秘密鍵~/.ssh/identityが作成される。
$ ssh-keygen -t rsa1 <--- rsa1を指定 Generating public/private rsa1 key pair. Enter file in which to save the key (/home/user/.ssh/identity): (Enter) <--- 秘密鍵の名前(そのままEnter) Enter passphrase (empty for no passphrase): (passphrase) <--- 秘密鍵のパスフレーズ Enter same passphrase again: (passphrase) <--- 秘密鍵のパスフレーズ再入力 Your identification has been saved in /home/user/.ssh/identity. <--- 秘密鍵の作成場所 Your public key has been saved in /home/user/.ssh/identity.pub. <--- 公開鍵の作成場所 The key fingerprint is: 4a:9d:f4:9e:09:80:c5:5e:b6:f6:4b:6d:a2:d7:9e:1a user@xxxx
作成した公開鍵ファイルは、SSHサーバに持っていく。
SSHサーバ側ユーザの準備
SSHクライアント側ユーザで作成した公開鍵ファイルを、~/.ssh/authorized_keysファイルに追加する。
$ cat id_rsa.pub >> ~/.ssh/authorized_keys
Linuxクライアントからの接続
sshユーティリティを使って、サーバに接続する。 そのサーバに初めて接続するときは、~/.ssh/known_hostsにサーバの公開鍵を登録してよいか、確認メッセージが表示される。
$ ssh user@10.1.1.1 <--- [SSHv2]ユーザuserでリモートホスト10.1.1.1に接続する The authenticity of host '10.1.1.1 (10.1.1.1)' can't be established. <--- ~/.ssh/known_hosts に登録されていないときは、メッセージが表示される RSA key fingerprint is 4d:1a:87:d6:f8:c5:d8:2e:b9:ac:2d:f5:50:d4:35:72. Are you sure you want to continue connecting (yes/no)? yes <--- ~/.ssh/known_hosts に登録してよいなら"yes"を入力 Warning: Permanently added '10.1.1.1' (RSA) to the list of known hosts. Enter passphrase for key '/home/user/.ssh/id_rsa': (passphrase) <--- 秘密鍵のパスフレーズを入力 Last login: Sun Jan 2 13:02:55 2005 from 10.1.1.2
SSHv1を使用する場合は、-1オプションでSSHv1を使用することを指定しないとだめっぽい。
$ ssh -1 user@10.1.1.1 <--- [SSHv1]ユーザuserでリモートホスト10.1.1.1に接続する The authenticity of host '10.1.1.1 (10.1.1.1)' can't be established <--- ~/.ssh/known_hosts に登録されていないときは、メッセージが表示される RSA1 key fingerprint is f2:34:0c:be:43:b8:a4:b2:a1:14:0c:9f:54:56:6b:85. Are you sure you want to continue connecting (yes/no)? yes <--- ~/.ssh/known_hosts に登録してよいなら"yes"を入力 Warning: Permanently added '192.168.1.248' (RSA1) to the list of known hosts. Enter passphrase for RSA key '/home/nina/.ssh/identity': (passphrase) <--- 秘密鍵のパスフレーズを入力 Last login: Thu Jan 6 21:41:11 2005 from 10.1.1.2
ssh-agentの使用(RSA認証[SSHv1]/公開鍵認証[SSHv2])
RSA認証[SSHv1]/公開鍵認証[SSHv2]では、サーバに接続するたびにパスフレーズを入力しなければならない。 ssh-agentデーモンとssh-addユーティリティを使用すると、ログイン時に一度パスフレーズを入力するだけですむ。
ログイン・ログアウト時処理の設定
bashを利用している場合は、~/.bash_profile(ログイン時処理)にssh-agentとssh-addを起動するように記述を追加し、~/.bash_logout(ログアウト時処理)にssh-agentを終了するように記述を追加する。
# ~/.bash_profile <--- bashログイン時処理 eval `ssh-agent` <--- このように起動することで、環境変数SSH_AUTH_SOCK・SSH_AGENT_PIDがセットされる ssh-add
# ~/.bash_logout <--- bashログアウト時処理
ssh-agent -k
csh/tcshを利用している場合は、~/.login(ログイン時処理)にssh-agentとssh-addを起動するように記述を追加し、~/.logout(ログアウト時処理)にssh-agentを終了するように記述を追加する。
# ~/.login <--- csh/tcshログイン時処理 eval `ssh-agent` <--- このように起動することで、環境変数SSH_AUTH_SOCK・SSH_AGENT_PIDがセットされる ssh-add
# ~/.bash_logout <--- csh/tcshログアウト時処理
ssh-agent -k
リモートホストへのログイン
リモートホストにログインすると、ssh-addユーティリティにより秘密鍵のパスフレーズの入力を求められる。 (SSH v1とv2の秘密鍵が存在する場合は、両方のパスフレーズを入力をする) ここで入力したパスフレーズは、ssh-agentデーモンがメモリに保持する。 SSH接続する際は、ユーザの代わりにssh-agentデーモンがパスフレーズを入力してくれる。
Enter passphrase for /home/user/.ssh/id_rsa: (passphrase) <--- ログイン時に秘密鍵のパスフレーズを入力する Identity added: /home/user/.ssh/id_rsa (/home/nina/.ssh/id_rsa) $ ssh user@10.1.1.1 Last login: Sun Jan 2 18:04:03 2005 from 10.1.1.1 <--- パスフレーズを入力しなくてもSSHログインできる
ホストからログアウトするときは、ssh-agentデーモンを終了する。 終了しておかないと、ログインするたびにプロセスが増える点と、パスフレーズがずっとメモリに残ってしまう点で問題がある。
ホストベース認証
ホストベース認証を使用すると、パスワードやパスフレーズを入力せずにSSHサーバへ接続できる。 サーバからみると、クライアントホストとユーザを信頼することになるので、十分検討すること。
名前解決
クライアントとサーバは、お互いに名前解決ができなければならない。 サーバは、クライアントの名前がHOSTSファイルかDNSで解決できればよい。 クライアントは、サーバの名前がDNSで解決できなければだめらしい。 (HOSTSファイルは不可)
サーバ側の準備
sshd_configで、HostbasedAuthentication(SSHv2)を有効にする。 修正した後は、sshdを再起動すること。
# /etc/ssh/sshd_config HostbasedAuthentication yes <--- SSHv2のホストベース認証を有効に
ssh-keyscanユーティリティを使用してクライアントホストの公開鍵を取得し、/etc/ssh/ssh_known_hostsに保存する。 このとき、クライアントホストはIPアドレスでなくFQDNで指定する。
# ssh-keyscan -t rsa fqdn.nina.jp >> /etc/ssh/ssh_known_hosts
/etc/ssh/shosts.equivに、クライアントホストFQDNとユーザ名を記述する。
# /etc/ssh/shosts.equiv fqdn.nina.jp user
ユーザホームディレクトリにある~/.ssh/known_hosts(ssh_known_hostsに相当)と~/.shosts(shosts.equivに相当)を使用したい場合は、sshd_configでIgnoreUserKnownHostsとIgnoreRhostsを有効にする。 ユーザが勝手にホストベース認証を使用できないようにするには、無効にしておく。
# /etc/ssh/sshd_config IgnoreUserKnownHosts yes <--- ~/.ssh/known_hostsを使用 IgnoreRhosts yes <--- ~/.shostsを使用
クライアント側の準備
ssh_configで、EnableSSHKeysignを有効にする。
# /etc/ssh/ssh_config <--- sshd_configではないので注意 EnableSSHKeysign yes
ssh_configまたはユーザホームディレクトリの~/.ssh/configで、HostbasedAuthenticationを有効にする。
# /etc/ssh/ssh_config or ~/.ssh/config <--- ~/.ssh/configのパーミッションは600にする HostbasedAuthentication yes
Linuxクライアントからの接続
sshユーティリティを使って、サーバに接続する。 パスワードもパスフレーズも入力を求められないことを確認する。
$ ssh user@10.1.1.1 <--- [SSHv2]ユーザuserでリモートホスト10.1.1.1に接続する Last login: Sun Jan 2 13:02:55 2005 from 10.1.1.2