XYZ 서버에서 ABC 서버로 SSH를 수행해야 하는 시나리오를 구현하려고 합니다. 원활한 비밀번호 없는 로그인을 위해 공개 키가 이미 설정되어 있습니다. 이제 비밀번호를 묻는 SSH 명령을 찾으면 스크립트를 종료하고 싶습니다. 이는 공개 키가 설정되지 않았음을 의미합니다.
ssh -o ConnectTimeout=10 user@ABC <<HERE
----- doing some stuff here----
HERE
출력 -
Password:
스크립트는 XYZ에 있습니다. XYZ에서 실행하고 SSH ABC를 시도합니다. 비밀번호를 묻는 메시지가 나타나면 메시지를 인쇄하여 스크립트를 종료하세요.
답변1
노력하다
ssh -o BatchMode=yes
~에 따르면man 5 ssh_config
배치 모드
If set to “yes”, passphrase/password querying will be disabled. In addition, the ServerAliveInterval option will be set to 300 seconds by default. This option is useful in scripts and other batch jobs where no user is present to supply the password, and where it is desirable to detect a broken network swiftly. The argument must be “yes” or “no”. The default is “no”.
답변2
PreferredAuthentications=publickey
연결 문자열에 옵션을 추가합니다 .
ssh -o PreferredAuthentications=publickey -o ConnectTimeout=10 user@ABC
종료 코드는 255이며 다음 정보를 얻을 수 있습니다.
user@ABC: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
답변3
SSH 옵션에 PasswordAuthentication=no를 추가하세요.
$ ssh -o PasswordAuthentication=no host
user@host: : Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
$ echo $?
255