점프 호스트를 사용하는 여러 SSH 명령이 포함된 스크립트가 있습니다. 매번 점프 및 대상 서버 비밀번호를 입력하고 싶고 sshpass
슬프게도 "중첩"을 사용해 보았지만 sshpass
성공하지 못한 것 같습니다.
sshpass -p "JumpPass" sshpass -p "ServerPass" ssh -J user@jump admin@server
많은 비밀번호를 "중첩"할 수 있나요 sshpass
? 아니면 다른 비밀번호를 제공하는 특정 옵션이 있습니까?
답변1
sshpass를 사용하여 두 개의 비밀번호를 전달할 수 있습니다. 두 개의 sshpass 호출마다 하나씩 두 개의 서로 다른 비밀번호 소스( -e
및 )를 사용해야 합니다.-d
env SSHPASS="JUMP_PASSWORD" \
sshpass -d 123 ssh \
-o ProxyCommand="sshpass -e ssh -W %h:%p JUMP_USER@JUMP_HOST" \
TARGET_USER@TARGET_HOST \
123<<<TARGET_PASSWORD
위의 코드 예에서 점프 호스트는 sshpass()에 제공된 JUMP_PASSWORD를 사용 -e
하고 대상 호스트는 sshpass()에 제공된 TARGET_PASSWORD를 사용합니다 -d
.
sshpass() 를 사용하여 비밀번호를 제공할 수도 있지만 -p
비밀번호가 프로세스 목록(ps)에 표시되므로 안전하지 않습니다. 위의 예에서는 시스템 프로세스 목록 출력에 비밀번호가 표시되지 않도록 sshpass를 사용합니다.
환경 변수 암호 소스(sshpass -e)는 점프 호스트의 ProxyCommand와 함께 사용해야 합니다. 환경 변수는 "-o ProxyCommand" 호출에서 sshpass로 읽히지만 파일 설명자 소스(sshpass -d)를 사용하는 경우 ProxyCommand 참조 값에 비밀번호를 제공해야 프로세스 목록에서 볼 수 있습니다. 산출. (예 -o ProxyCommand="sshpass -d 124 ssh -W %h:%p JUMP_USER@JUMP_HOST 124<<<JUMP_PASSWORD"
: ) <- 그래서 이것이 단점입니다.
참고: 이 방법을 사용하면 sshpass
JUMP_HOST가 설치되지 않습니다.
고쳐 쓰다 이 솔루션은 rsync에서도 작동합니다.
env SSHPASS="JUMP_PASSWORD" \
rsync -v -a \
-e "sshpass -d 123 ssh \
-o ProxyCommand=\"sshpass -e ssh -W %h:%p USER@JUMP_HOST\" USER@TARGET_HOST" \
:/remote/directory/ /local/directory/ \
123<<<TARGET_PASSWORD
슈퍼유저에 대한 내 답변을 참조하세요.https://superuser.com/questions/1646074/why-rsync-with-jump-host-and-sshpass-not-working/1689136#1689136
답변2
나는 보통 muru가 언급한 ProxyCommand를 사용합니다.
또한 인증을 위해 비밀번호 대신 키를 사용하는 것은 어떨까요? {Linux를 사용하기 시작했을 때 항상 비밀번호를 사용했지만, 한 번 키를 사용하면 다시는 돌아갈 수 없습니다.}
이것을 내 SSH 프로필 아래에 두고 SSH를 통해 서버에 직접 연결할 수 있습니다 ssh server
.
Host server
ControlMaster auto
ProxyCommand ssh -W %h:%p -i your_key_for_Jump user@jump
IdentityFile your_key_for_server_if_not_idrsa
User ssh_user_for_server