LinuxでSSH

[サーバの実験室 Slackware]

作成 : 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-agentssh-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-agentssh-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_hostsssh_known_hostsに相当)と~/.shostsshosts.equivに相当)を使用したい場合は、sshd_configIgnoreUserKnownHostsIgnoreRhostsを有効にする。 ユーザが勝手にホストベース認証を使用できないようにするには、無効にしておく。

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

[サーバの実験室 slackware]