공개 키 인증이 실패하면 스크립트된 SSH에서 비밀번호를 묻지 않아야 합니다.

공개 키 인증이 실패하면 스크립트된 SSH에서 비밀번호를 묻지 않아야 합니다.

내 사용 사례는 다음과 같습니다. 수백 대의 서버를 나열하고 public key authentication특정 서버 private key(Ssh 클라이언트 .ssh디렉터리)를 사용하여 로그인을 허용하는지 테스트하는 스크립트가 있습니다. 이러한 서버 중 일부는 잘못 구성되어 있으며 이러한 서버의 SSH 서비스를 제어할 수 없습니다.

이것이 내가 지금까지 가지고 있는 것입니다:

ssh -o ConnectTimeout=2 -o PasswordAuthentication=no -q $x exit
returncode=$?

따라서 이는 일부 SSH 구성 오류(예: 위의 원격 서버에서)로 인해 일부 문제가 있는 서버에 오류가 발생할 때까지 지금까지 대부분의 서버에서 작동합니다(예: non-zero서버에 연결할 수 없고 0서버가 로그인할 수 있을 때 ~/.ssh반환 코드를 반환 ). .여기이 상황에서 수행할 수 있는 작업을 설명하는 관련 스레드입니다.

하지만 원격 서버를 고치고 싶지는 않습니다. SSH가 실패 non-zero하고 실패 시 반환 코드로 종료되기를 원합니다 SSH key authentication.

이 문제를 해결하는 방법에 대한 아이디어가 있습니까?

미리 감사드립니다.

답변1

timeout실행 시간을 제한하는 것 외에도 다음을 사용할 수도 있습니다 ssh.

timeout 10 ssh -o ConnectTimeout=2 -o PasswordAuthentication=no -q $x exit returncode=$?

또는

timeout --preserve-status 10 ssh -o ConnectTimeout=2 -o PasswordAuthentication=no -q $x exit returncode=$?

적절한 시간 초과를 선택하십시오. 부하가 심한 경우에도 2초 ConnectTimeout+ 8초의 실행 시간 exit이면 충분합니다.

답변2

제안에 따르면,

ssh-o batchmode=yes상호 작용을 방지하는 옵션이 있습니다 .

  • 비밀번호를 묻지 않음

  • 확인을 위해 서명한 외국인이 없습니다.

연결이 설정되지 않으면 오류 코드가 발생합니다.

관련 정보