SSH는 스크립트에서 호출할 때 비밀번호를 묻습니다.

SSH는 스크립트에서 호출할 때 비밀번호를 묻습니다.

마스터 컴퓨터 한 대와 슬레이브 컴퓨터 네 대가 있습니다. 마스터 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에 복사하거나, 적절한 자격 증명을 루트로 생성하거나, 자격 증명이 저장된 사용자로 스크립트를 실행하십시오.

관련 정보