
マスター コンピュータが 1 台、スレーブ コンピュータが 4 台あります。マスター PC で RSA 公開/秘密キーを生成しました。次に、公開キー ( id_rsa.pub
) をスレーブ マシンに としてコピーしましたauthorized_keys
。
マスター PC のターミナルで次のように SSH を呼び出すと、パスワードは要求されません。
ssh –o UserKnownHostsFile=/dev/null –o StrictHostKeyChecking=no hduser@slave1
パスワードを尋ねることなくスレーブ マシンに自動的にログインするためのスクリプトを作成しました。
SERVER_LIST=`cat /home/hduser/slaves` # slave1, slave2 ...
for host in $SERVER_LIST; do
host=hduser@$host
ssh –t –o UserKnownHostsFile=/dev/null –o StrictHostKeyChecking=no $host;
done
このスクリプトを使用すると、SSH がスレーブのパスワードを要求します。-vv
オプション付きで SSH を使用すると、次のメッセージが表示されます:
debug1: ssh_ecdsa_verify: signature correct
debug2: kex_derive_keys
debug2: set_newkeys: mode 1
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug2: set_newkeys: mode 0
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /root/.ssh/id_rsa ((nil))
debug2: key: /root/.ssh/id_dsa ((nil))
debug2: key: /root/.ssh/id_ecdsa ((nil))
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Trying private key: /root/.ssh/id_rsa
debug1: Trying private key: /root/.ssh/id_dsa
debug1: Trying private key: /root/.ssh/id_ecdsa
debug2: we did not send a packet, disable method
debug1: Next authentication method: password
hduser@slave1's password:
マスターPCとスレーブPCの権限を変更しました。
sudo chmod 755 /home/hduser
sudo chmod 700 -R ~/.ssh
sudo chown hduser ~/.ssh
ターミナルで SSH を呼び出すときにはパスワードは求められませんが、スクリプトで呼び出すときにはパスワードが求められます。何が足りないのでしょうか? どうすれば修正できますか?
答え1
SSH ログには、ログイン セッションが /root/.ssh/ で資格情報を検索していることが示されており、これはスクリプトが root として実行されていることを意味します。
id_* ファイルを /root/.ssh にコピーし、root として適切な資格情報を生成するか、資格情報が保存されているユーザーとしてスクリプトを実行します。