
Ich habe einen Master- und vier Slave-Computer. Ich habe den öffentlichen/privaten RSA-Schlüssel auf dem Master-PC generiert. Dann habe ich den öffentlichen Schlüssel ( id_rsa.pub
) als auf die Slave-Rechner kopiert authorized_keys
.
Es wird nicht nach einem Passwort gefragt, wenn ich SSH wie folgt auf dem Terminal des Master-PCs aufrufe:
ssh –o UserKnownHostsFile=/dev/null –o StrictHostKeyChecking=no hduser@slave1
Ich habe dieses Skript geschrieben, um sich automatisch bei Slave-Maschinen anzumelden, ohne nach einem Passwort zu fragen.
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 fragt Slave-Passwörter ab, wenn ich dieses Skript verwende. Ich erhalte diese Meldung, wenn ich SSH mit -vv
der Option verwende:
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:
Ich habe die Berechtigungen auf dem Master-PC und dem Slave-PC geändert.
sudo chmod 755 /home/hduser
sudo chmod 700 -R ~/.ssh
sudo chown hduser ~/.ssh
Wenn ich SSH im Terminal aufrufe, wird kein Passwort abgefragt, aber wenn ich es im Skript aufrufe, wird trotzdem nach dem Passwort gefragt. Was übersehe ich? Wie kann ich das beheben?
Antwort1
Die SSH-Protokolle zeigen, dass die Anmeldesitzung in /root/.ssh/ nach den Anmeldeinformationen sucht, was bedeutet, dass Ihr Skript als Root ausgeführt wird.
Kopieren Sie entweder Ihre id_*-Dateien nach /root/.ssh, generieren Sie die entsprechenden Anmeldeinformationen als Root oder führen Sie das Skript als Benutzer aus, unter dem Sie die Anmeldeinformationen gespeichert haben.