
마스터 컴퓨터 한 대와 슬레이브 컴퓨터 네 대가 있습니다. 마스터 PC에서 rsa 공개/개인 키를 생성했습니다. 그런 다음 publickey( 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는 슬레이브 비밀번호를 묻습니다. 다음 옵션 과 함께 SSH를 사용할 때 이 메시지가 나타납니다 -vv
.
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/에서 자격 증명을 찾고 있음을 보여줍니다. 이는 스크립트가 루트로 실행되고 있음을 의미합니다.
id_* 파일을 /root/.ssh에 복사하거나, 적절한 자격 증명을 루트로 생성하거나, 자격 증명이 저장된 사용자로 스크립트를 실행하십시오.