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 …
. 이는 터미널에서 직접 읽을 수 없음을 의미합니다. 터미널에 직접 인쇄되지 않습니다. 이는 궁극적으로 중계 역할을 하므로 터미널을 사용하는 것과 같습니다. 그러나 그 전에 인쇄되는 내용을 가로채고 나중에 지정한 문자열도 삽입한 다음 해당 문자열이 사용 중인 터미널(귀하의 터미널이 아님)에서 나오는지 "확인"합니다. 이 방법은 당신을 속일 수 있습니다sshpass
ssh
ssh
sshpass
ssh
sshpass
sshpass
ssh
sshpass
ssh
-p
ssh
ssh
ssh
타이핑된비밀번호는 sshpass
누가 "입력"하는 경우입니다.
기본적으로 sshpass
대기 assword:
(또는 assword
1 ?)는 비밀번호 프롬프트의 일부로 발생합니다. 예를 들어, 키를 사용하지 않고 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
비밀번호를 올바르게 전달해야 합니다.