"ssh"는 작동하지만 "sshpass"는 작동하지 않습니다. 이것이 어떻게 가능합니까?

"ssh"는 작동하지만 "sshpass"는 작동하지 않습니다. 이것이 어떻게 가능합니까?

SSH 연결을 위한 키 쌍을 구성했습니다. 작동하지만 물론 비밀번호가 필요합니다.

ssh [email protected]

이제 설치한 sshpass를 사용하여 로그인을 시도합니다. 속성을 사용해 보았지만 속성 -p도 사용해 보았지만 -f아무 것도 작동하지 않습니다. 그냥 멈춥니다.

verbose는 클라이언트 측에서 이 정보를 제공합니다.

sshpass -v -p "pass" ssh [email protected]
SSHPASS searching for password prompt using match "assword"
SSHPASS read:
SSHPASS read: Enter passphrase for key '/home/user1/.ssh/id_rsa':

서버 측에서는 로그에서 다음 정보를 볼 수 있습니다.

Accepted key RSA SHA256:V/V29pA2Ps5k/lBgz2R5XFP6vaaaOUN5hj0hca+j8TI found at __PROGRAMDATA__/ssh/administrators_authoriz
ed_keys:1
debug3: mm_answer_keyallowed: publickey authentication test: RSA key is allowed
debug3: mm_request_send: entering, type 23
debug3: send packet: type 60 [preauth]
debug2: userauth_pubkey: authenticated 0 pkalg rsa-sha2-256 [preauth]
debug3: user_specific_delay: user specific delay 0.000ms [preauth]
debug3: ensure_minimum_time_since: elapsed 19.018ms, delaying 1.849ms (requested 5.217ms) [preauth]
Postponed publickey for user1 from 10.7.141.243 port 44750 ssh2 [preauth]

여러분의 열정적인 도움에 진심으로 감사드립니다!

답변1

ssh표준 입력 대신 터미널( )을 사용하여 암호(또는 암호 문구)를 프롬프트하고 읽습니다 /dev/tty. 이렇게 하면 데이터를 파이프/리디렉션할 수 ssh있으며 요청 시 비밀번호를 제공할 수 있습니다. 하지만 단말기를 통해 비밀번호를 제공하는 대신 '가짜' 단말기를 제공해야 한다 ssh. 그것이 바로 그 일입니다 sshpass.

전용 에뮬레이트 터미널에서 실행하는 경우 sshpass … ssh …. 이는 터미널에서 직접 읽을 수 없음을 의미합니다. 터미널에 직접 인쇄되지 않습니다. 이는 궁극적으로 중계 역할을 하므로 터미널을 사용하는 것과 같습니다. 그러나 그 전에 인쇄되는 내용을 가로채고 나중에 지정한 문자열도 삽입한 다음 해당 문자열이 사용 중인 터미널(귀하의 터미널이 아님)에서 나오는지 "확인"합니다. 이 방법은 당신을 속일 수 있습니다sshpasssshsshsshpasssshsshpasssshpasssshsshpassssh-psshsshssh타이핑된비밀번호는 sshpass누가 "입력"하는 경우입니다.

기본적으로 sshpass대기 assword:(또는 assword1 ?)는 비밀번호 프롬프트의 일부로 발생합니다. 예를 들어, 키를 사용하지 않고 is not available 인 경우 sshpass다음 ssh이 인쇄됩니다.

[email protected]'s password:

비밀번호를 입력할 때까지 기다립니다. 귀하가 sshpass비밀번호를 제공 한 경우 sshpass이 메시지가 가로채어 비밀번호가 "입력"됩니다. 올바른 메시지가 나타날 때까지 기다려서 비밀번호가 필요한 sshpass시기를 파악한 ssh후에야 비밀번호가 전달됩니다.

귀하의 경우 프롬프트가 다릅니다. ssh비밀번호가 필요하지 않으며 다른 프롬프트를 사용하여 비밀번호를 요청합니다. 의 프롬프트는 ssh정확히 정확했고 Enter passphrase for key '/home/user1/.ssh/id_rsa':일치하는 항목이 없었기 assword:때문에 sshpass전혀 나타나지 않는 기본 프롬프트를 계속 기다렸습니다.

-P기본값을 재정의하는 데 사용됩니다 .

-P
비밀번호 알림을 설정하세요. Sshpass는 비밀번호를 보낼 시기를 표시하기 위해 TTY에 대한 프로그램 출력에서 ​​이 프롬프트를 검색합니다. 기본적으로 sshpass는 문자열( assword: 및 일치) 을 찾습니다 . 클라이언트의 프롬프트가 이들 중 어느 것에도 속하지 않는 경우 이 옵션을 사용하여 기본값을 무시할 수 있습니다.Password:password:

(원천:man 1 sshpass)

귀하의 경우에는 다음과 같을 수 있습니다.

sshpass -P assphrase -p "pass" ssh [email protected]

이제 sshpass차단이 Enter passphrase …에서 발생 하면 ssh이후에 지정한 모든 항목에 응답합니다 -p. 다음으로, 귀하의 터미널과 ssh귀하가 사용하고 있는 터미널 사이의 중계 역할을 하게 될 것 입니다.

일반적으로 말해서, sshpass일반적으로 터미널을 사용하여 비밀번호를 묻는 메시지를 표시하고 읽는 모든 도구에 비밀번호(일반적으로 문자열)를 제공하는 데 사용할 수 있습니다(stdin+stdout+stderr와 반대). -P도구의 사용 프롬프트에 맞게 명령을 조정할 수 있습니다.


1 매뉴얼에는 그렇게 나와 있지만 assword:, 당신의 결과물도 sshpass -v그렇게 나와 있습니다 using match "assword". 어느 쪽이든 -P비밀번호를 올바르게 전달해야 합니다.

관련 정보