
.ssh/config
게이트웨이를 통해 호스트에 연결하는 데 사용하고 싶습니다 . RSA 키를 설정하고 싶지 않고 비밀번호를 사용해야 합니다. 나는 이전에 비밀번호 없이 이런 종류의 호핑을 수행한 적이 있습니다. 이제 비밀번호로 해보려고 합니다.
나에게 맞는 직접적인 명령은 다음과 같습니다.
sshpass -p mypassword ssh -o ProxyCommand="ssh gateway -W %h:%p" myusername@myip
게이트웨이에서 이미 키 인증을 설정했으며 자세한 내용은 .ssh/config에 있습니다. 에서 이를 설정하기 위해 .ssh/config
다음을 시도했습니다.
Host h_act
<username, hostname, port etc.>
ProxyCommand ssh gateway -W %h:%p
Host h
ProxyCommand sshpass -p mypassword ssh h_act
그러나 시도하면 을 ssh h
얻습니다 Pseudo-terminal will not be allocated as stdin is not a terminal
. -vtt
이상한 메시지를 받기 위해 ssh를 사용해 보았지만 터미널은 없었습니다. 나는 ProxyCommand 체인이 netcat/nc
또는 ssh -W
그것과 함께 있을 때 작동한다는 것을 알고 있습니다. 하지만 여기서는 작동하지 않습니다. sshpass 없이 마지막 명령을 시도하더라도 동일한 오류가 발생합니다. 나는 그것이 ProxyCommand가 따르는 명령에 대해 가지고 있는 특정 기대와 관련이 있다고 추측하고 있으며 나는 그것을 이행할 수 없습니다.
어떤 아이디어가 있나요?
답변1
귀하의 구성이 단일 라이너와 동일하지 않다고 생각합니다. 다음과 같습니다.
ssh -o ProxyCommand='sshpass -p mypassword ssh -o ProxyCommand="ssh gateway -W %h:%p" h_act' myusername@myip
즉, sshpass
ProxyCommand 내부에서 실행 중입니다.
그러나 나는 그것이 작동하지 않을 것이라고 생각하고 클라이언트를 의사 터미널에 sshpass
래핑하여 암호가 실제로 파일이나 터미널의 사용자 입력이 아닌 다른 것에서 온다는 사실을 숨깁니다. ssh
이렇게 하려면 ssh
클라이언트가 실행되기 전에 실행되어야 합니다.
첫 번째 한 줄짜리 코드는 작동하지만 매번 입력하고 싶지 않다면 sshpass
이를 쉘 스크립트로 래핑할 수 있습니다.
#/bin/sh
sshpass -f passwordfile ssh -o ProxyCommand="ssh gateway -W %h:%p" "$@"
그런 다음 sshscript myusername@myip
.
여담이지만 을 사용하지 마십시오 . 클라이언트(및 )가 실행되는 동안 출력 sshpass -p
에 비밀번호가 표시됩니다 . 환경을 통해 비밀번호를 전달하거나 파일에서 비밀번호를 읽는 것이 더 좋습니다 .ps
ssh
sshpass
sshpass -e
sshpass -f file