SSH はスクリプト内で呼び出すときにパスワードを要求します

SSH はスクリプト内で呼び出すときにパスワードを要求します

マスター コンピュータが 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 として適切な資格情報を生成するか、資格情報が保存されているユーザーとしてスクリプトを実行します。

関連情報