bash 스크립트에 SSH 비밀번호 프롬프트 메시지가 표시되지 않음

bash 스크립트에 SSH 비밀번호 프롬프트 메시지가 표시되지 않음

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 키가 설정되었는지 확인하는 방법은 끔찍합니다.

  1. 실패할 수 있습니다(예: 연결을 설정하는 데 5초 이상 걸리거나 사용자의 셸이 "종료"를 이해하지 못하는 경우, 또는아무것그렇지 않으면 5초 이내에 발생하지 않습니다.) 사용자가 SSH 키를 설정하더라도
  2. 사용자가 아직 연결을 설정하지 않은 경우(5초 이내에 연결이 설정되고 사용자가 비밀번호를 충분히 빠르게 입력하는 경우가 일반적임) 또는 연결이 이미 설정된 경우에도 성공할 수 있습니다.
  3. 그리고 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(가능한 경우) 로그인을 시도한 다음 사용자의 공개 키가 서버에 설치되어 있는지 확인합니다. 이로 인해 전체 스크립트가 쓸모 없게 될 수 있습니다. :)

관련 정보