내 사용 사례는 다음과 같습니다. 수백 대의 서버를 나열하고 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
상호 작용을 방지하는 옵션이 있습니다 .
비밀번호를 묻지 않음
확인을 위해 서명한 외국인이 없습니다.
연결이 설정되지 않으면 오류 코드가 발생합니다.