gate-toroku-system | インストールの手引き | 登録サーバ | その他のサーバ
2007年5月19日
gate-touroku-system 開発チーム
$Id: ssh-nopass-sarge.html,v 1.2 2007/05/19 09:37:03 odakker Exp $
この文章は ssh (Secure shell) を導入しているホスト間でパスワードを 入力せずにログインを可能にする方法を取り扱う。Debian GNU/Linux 3.1 (sarge版) を対象とし,動作確認を行っている。 なお, プロトコルは SSH2 を用いていることを仮定している。 SSH1 を用いてのノンパスログインを行う場合には sshを用いたノンパスワードログイン (SSH1版)を参考にすること。
gate登録システムでは、gateユーザーがパスワード無しで ssh ログインできなければならない。この文章では、簡単な手順に ついてのみ記す。
ログイン名 username がローカルホスト (local.ep.sci.hokudai.ac.jp) からリモートホスト (remote.ep.sci.hokudai.ac.jp) へパスワード無しの ssh ログイン (SSH2 認証使用) を可能するには以下のファイルに決められた情報が記述されている 必要がある。
- ローカルホスト (登録サーバー)
- /home/<username>/.ssh/known_hosts にリモートホストの公開鍵 ([5.2.2], [5.2.3], [5.2.4] 参照)
- /etc/ssh/ssh_config に .shosts 認証を可能にするための設定. ([4.2] 参照)
- ssh 接続用コマンド /usr/bin/ssh, /usr/bin/ssh-keygen に s ビット. ([4.1] 参照)
- リモートホスト (その他のサーバー)
- /home/<username>/.ssh/known_hosts に ローカルホストの公開鍵 ([5.1.2], [5.1.3], [5.1.4] 参照)
- なおローカル/リモートホストの SSH2 の公開鍵は /etc/ssh/ssh_host_rsa_key.pub として置かれている。 ただし known_hosts での表記と微妙に違うこと に注意が必要。
- /home/<username>/.shosts にノーパスログインの許可を与える ローカルホストのIPアドレス or ドメイン名 と (リモートでの) ログイン名 ([5.1.1] 参照)
- ドメイン名 で指定する場合には DNS サーバによって 正引き「ドメイン名 →IPアドレス」 と 逆引き「IPアドレス →ドメイン名」 が行われなければならない。 (※ 逆引きも必要である事に注意。)
- なお、.shosts のパーミッションは 600 になっていなければならない。
- /etc/ssh/sshd_config に .shosts 認証を可能にするための設定. ([3.1] 参照)
sarge における ssh のデフォルトの挙動は, ネットワーク上 での危険を配慮してかなりかたく作られている。
したがって パスワード認証無しの利用においては、いくつかのケア が必要である。 なお、以下の設定ではローカル、リモート共に SSH2 を用いていることを前提としてる。注意して欲しい。以下の項目を確認し、変更する。
[ep local] EP サーバでは grey, yellow, blue, white, green, brown がここで言う「リモートホスト」に当たり、 orange が「ローカルホスト) 」に当たる。
[3.1] ssh デーモンにおいて .shosts 認証を利用可能にする
[3.1.1] /etc/ssh/sshd_config の中の以下の項目を変更する。
# vi /etc/ssh/sshd_config
IgnoreRhosts yes
をno
に変更し,
HostbasedAuthentication no
をyes
に変更する.[3.1.2] ssh を再起動する
# /etc/init.d/ssh restart
[ep local] EP サーバでは grey, yellow, blue, white, green, brown がここで言う「リモートホスト」に当たり、 orange が「ローカルホスト) 」に当たる。
[4.1] /usr/bin/ssh, /usr/bin/ssh-keygen の s ビット
ローカルホストの /usr/bin/ssh, /usr/bin/ssh-keygen の s ビットが立っているか確認する.
$ ls -lg /usr/bin/ssh /usr/bin/ssh-keygen
-rwsr-xr-x 1 root root 230248 Jul 12 19:52 /usr/bin/ssh
-rwsr-xr-x 1 root root 151496 Jun 20 01:23 /usr/bin/ssh-keygens ビットが立っている ( 所有者の実行権限が「s」 になっている ) 場合は、次の [4.2] ssh コマンドにおいて .shosts 認証を有効にする へ進む s ビットが立っていない場合は、以下の手順に従って変更する。
[4.1.1] 手順
以下のコマンドで, /usr/bin/ssh, /usr/bin/ssh-keygen に s ビットを立てる。
# chmod 4775 /usr/bin/ssh /usr/bin/ssh-keygensビットが立ったかどうか確認する。
$ ls -lg /usr/bin/ssh /usr/bin/ssh-keygen
[4.2] ssh コマンドにおいて .shosts 認証を有効にする
[4.2.1] /etc/ssh/ssh_config の中に設定を追加する。
# vi /etc/ssh/ssh_configとして
/etc/ssh/ssh_config
を編集し, 以下の 2 行を追加する。HostbasedAuthentication yes PreferredAuthentications hostbased,publickey,password
上記の項目を確認・変更したら、以下の作業を行う。
[5.1] リモートホスト (登録サーバー以外) で行うこと
[ep local] EP サーバでは grey, yellow, blue, white, green, brown がここで言う「リモートホスト ( <remote> ) 」に当たり、 orange が「ローカルホスト ( <local> ) 」に当たる。 以下ではその部分を差し替えて作業を行ってほしい。
[5.1.1] .shosts の作成
・ リモートホストにおいてgateになる。
username@<remote>:~$ sudo -u gate -s -H・ /home/gate/へ移動
gate@<remote>:~$ cd /home/gate/・ .shostsを作成する
gate@<remote>:~$ vi .shosts・ ローカルホストのドメイン名 と ローカルからログインするアカウント名を書き込む。
<local>.ep.sci.hokudai.ac.jp gate
[ep local] EP サーバにおける登録サーバ ( ローカルホスト ) は orange なので,
orange.ep.sci.hokudai.ac.jp gate
と書き込めばよい。
※ ただし、ドメイン名を書き込む際には DNS サーバによって正引き「ドメイン名 →IPアドレス」 が行われているだけでなく、 逆引き「IPアドレス →ドメイン名」 が行われていなければならない。 もしも DNS サーバによる正引き、逆引きが行われないようならば、 IPアドレスを直接書き込むなどする事。
・.shosts を他人に見れないようにする。
gate@<remote>:~$ chmod 600 .shosts
[5.1.2] 既存のローカルホストの公開鍵を消去する。
以下のコマンドで、ローカルホストの公開鍵が既に存在するのか しらべる。
gate@<remote>:~$ grep <local> /home/gate/.ssh/known_hosts下記のような出力が得られた場合は以下の手順に従い、 この公開鍵を削除する。
<local>.ep.sci.hokudai.ac.jp, ssh-rsa AAAB3N…
…u7gVFln6pKNeudEG9ocCetJ2VgElUsv8sboz15M以上のような出力が得られず、known_hosts に ローカルホストの公開鍵が無いことが確認できた場合は [5.1.4] ローカルホストの公開鍵の入手 へ進む。
[5.1.3] 公開鍵削除の手順
/home/gate/.ssh/へ移動する。
gate@<remote>:~$ cd /home/gate/.ssh/known_hosts をエディタで編集する。
gate@<remote>:~$ vi known_hosts
ローカルホストの公開鍵である以下の一行を消す。
<local>.ep.sci.hokudai.ac.jp, ssh-rsa AAAB3N…
…u7gVFln6pKNeudEG9ocCetJ2VgElUsv8sboz15M[5.1.4] ローカルホストの公開鍵の入手
以下のように、ローカルホストへ ssh 接続を試みる。 なお、ローカルホストは FQDN (フルドメイン) で指定すること。
gate@<remote>:~$ ssh <local>.ep.sci.hokudai.ac.jpすると、ローカルホストの公開鍵は無いため、 以下のようなメッセージが出る。
The authenticity of host '<local>.ep.sci.hokudai.ac.jp (133.87.45.**)'
can't be established. RSA key fingerprint is 4d:c5:e9:ed:05:df:49:8a:93:d4:e9:cb:57:3a:d2:5b.
Are you sure you want to continue connecting (yes/no)?これには「yes」と答える。 これでローカルホストの現在の公開鍵が .ssh/known_hosts に 書き込まれる。 今度は削除しないように。
その後、パスワードを聞かれるが、gate ユーザにはパスワードは 設定されていないので接続できないがこれで良い。 (リモートからローカルへ接続できる必要はない。)
[5.2] ローカルホスト (登録サーバー) で行うこと
[ep local] EP サーバでは orange がここで言う「ローカルホスト」に当たる。
[5.2.1] gateユーザになる。
username@<local>:~$ sudo -u gate -s -H[5.2.2] 既存のリモートホストの公開鍵を消去する。
以下のコマンドで、リモートホストの公開鍵が既に存在するのか しらべる。
gate@<local>:~$ grep <remote> /home/gate/.ssh/known_hosts下記のような出力が得られた場合は以下の手順に従い、 この公開鍵を削除する。
<remote>.ep.sci.hokudai.ac.jp, ssh-rsa CBA4BN…
…sv8sboz15MFln6pKu7gVCetJ2VgElUNeudEG9oc以上のような出力が得られず、known_hosts に リモートホストの公開鍵が無いことが確認できた場合は [5.2.4] リモートホストの公開鍵の入手 へ進む。
[5.2.3] 公開鍵削除の手順
/home/gate/.ssh/へ移動する。
gate@<local>:~$ cd /home/gate/.ssh/known_hosts をエディタで編集する。
gate@<local>:~$ vi known_hosts
ローカルホストの公開鍵である以下の一行を消す。
<remote>.ep.sci.hokudai.ac.jp, ssh-rsa CBA4BN…
…sv8sboz15MFln6pKu7gVCetJ2VgElUNeudEG9oc[5.2.4] リモートホストの公開鍵の入手
以下のように、リモートホストへ ssh 接続を試みる。 なお、リモートホストは FQDN (フルドメイン) で指定すること。
gate@<local>:~$ ssh <remote>.ep.sci.hokudai.ac.jpすると、さきほどリモートホストの公開鍵を削除したため、 以下のようなメッセージが出る。
The authenticity of host '<remote>.ep.sci.hokudai.ac.jp (133.87.45.**)' can't be established.
RSA key fingerprint is cd:8e:16:a9:a9:b0:44:55:06:e3:39:d2:13:de:e9:3c. Are you sure you want to continue connecting (yes/no)?これには「yes」と答える。 これでリモートホストの現在の公開鍵が .ssh/known_hosts に 書き込まれる。 今度は削除しないように。
すると、今度はパスワードを聞かれる事なく、リモートホストへ ログインできるはずである。
gate@<remote>:~$
以上で、遠隔起動が可能になり、データベースサーバからその他のサーバ を動かす事が可能になった。