Bash 스크립트를 통해 SSH 연결을 확인하고 있습니다.
echo -e "Checking if you have setup a key for serve ssh connection ..."
timeout 5s ssh uname@host 'exit'
if [ $? -eq 0 ];
then
echo -e "You're done"
else
echo -e "Set up a ssh key please or check username password"
fi
스크립트가 잘 실행됩니다. 비밀번호를 묻는 메시지가 나타납니다.
그러나 문제는 비밀번호를 요청할 때 메시지가 없으며 다음과 같은 프롬프트 메시지가 표시되지 않는다는 것입니다.
uname@host's Password:
이 메시지가 표시되기를 원합니다.
답변1
SSH 키가 설정되었는지 확인하는 방법은 끔찍합니다.
- 실패할 수 있습니다(예: 연결을 설정하는 데 5초 이상 걸리거나 사용자의 셸이 "종료"를 이해하지 못하는 경우, 또는아무것그렇지 않으면 5초 이내에 발생하지 않습니다.) 사용자가 SSH 키를 설정하더라도
- 사용자가 아직 연결을 설정하지 않은 경우(5초 이내에 연결이 설정되고 사용자가 비밀번호를 충분히 빠르게 입력하는 경우가 일반적임) 또는 연결이 이미 설정된 경우에도 성공할 수 있습니다.
- 그리고 SSH 연결이 절반만 완료된 상태로 남을 수도 있습니다.
이 방법을 바꿔야 합니다. 그것은 단순히 제 역할을 하지 못했습니다.
이는 간단합니다. SSH 버전에 따라 비밀번호 인증을 허용하지 않도록 설정하세요. 옵션( man ssh
)이 있을 가능성이 높습니다.
ssh -n -oControlMaster=no \
-oPasswordAuthentication=no \
-oKbdInteractiveAuthentication=no \
-oPreferredAuthentications=publickey \
user@host true \
|| \
echo "can't log in"
원하는 대로 하세요,아니요시간 초과 등과 관련된 나쁜 아이디어. 일이 성공하거나 실패합니다.
문제: 호스트에 연결할 수 없는지, 인증할 수 없는지 여부에 관계없이 동일한 내용이 인쇄됩니다. 이것들은 다른 것입니다.
그런데, 모든 것이 사용자가 공개 키 인증이 설정되어 있는지 확인하기 위한 것이라면 ssh-copy-id user@host
(가능한 경우) 로그인을 시도한 다음 사용자의 공개 키가 서버에 설치되어 있는지 확인합니다. 이로 인해 전체 스크립트가 쓸모 없게 될 수 있습니다. :)