사용자 상호 작용 없이 실행해야 하는 스크립트가 있고 일부 SSH 포트 전달을 설정해야 합니다. 비밀번호를 묻는 메시지가 표시되어서는 안 됩니다. SSH에서 계속하려면 비밀번호가 필요한 경우 스크립트에 오류가 발생하도록 하고 싶습니다.
연결을 시도하기 전에 SSH 에이전트가 특정 호스트에 연결하도록 올바르게 설정되었는지 SSH가 알려주도록 할 수 있는 방법이 있습니까?
답변1
ssh에는 비밀번호를 묻는 대신 단순히 실패하게 만드는 "BatchMode" 옵션이 있습니다. 이는 스크립트가 암호를 요구할지 여부를 예측하도록 하는 것보다 훨씬 쉬워 보입니다. 하나슈퍼유저에 대한 유사한 질문에 답변다양한 대화형 인증 유형이 있기 때문에 PasswordAuthentication을 비활성화하는 것이 항상 작동하는 것은 아니며 키에 대한 암호를 묻는 메시지를 표시하는 것을 방지할 수 없는 것처럼 보입니다.
를 사용 ssh -o BatchMode=yes
하거나 이를 호스트의 ssh_config에 넣을 수 있습니다.
또한 제어 터미널이 없으면 ssh는 비밀번호를 묻는 메시지를 표시하지 않습니다(" " 오류가 발생합니다 ). Do this특별히 ssh 명령에 대해 사용하여 제어 tty 없이 프로세스를 시작할 수 있습니다(이렇게 하면 비밀번호 등을 묻는 메시지 read_passphrase: can't open /dev/tty: No such device or address
도setsid
표시되지 않습니다. sudo
)
프로세스를 실행하면 setsid
백그라운드에서 자동으로 실행되므로(셸에는 다른 세션의 프로세스에 대한 작업 제어가 없기 때문에) stdout/stderr을 로그 파일(및 표준)로 리디렉션하여 이에 대비해야 합니다. /dev/null에 입력). 실행 중인 프로그램이 setsid
표준 입력에서 무엇이든 읽으려고 하면 백그라운드 프로세스가 터미널을 읽지 못하도록 방지하는 일반적인 메커니즘이 작동하지 않기 때문에 이상한 결과가 나타날 수 있습니다.
답변2
실제로 시도해 보지 않고는 작동하는지 알 수 없습니다. 잘못될 수 있는 일이 많이 있습니다.
귀하의 경우에는ssh_config매뉴얼 페이지에서 "No"로 설정할 수 있는 "PasswordAuthentication" 옵션이 있는 것을 볼 수 있습니다. 보고 있다SSH매뉴얼 페이지에는 프로그램에 구성 옵션을 보내는 데 사용할 수 있는 "-o" 옵션이 있는 것을 볼 수 있습니다.
따라서 이것을 사용하여 PasswordAuthentication을 끄고 원하는 것을 얻을 수 있다고 생각합니다.