ProxyCommand
?로 다음 명령을 어떻게 다시 쓸 수 있습니까?
ssh -l username1 -t jumphost1 \
ssh -l username2 -t jumphost2 \
ssh -l username3 -t jumphost3 \
ssh -l username4 server
작동하지 않습니다
ssh -o ProxyCommand="\
ssh -l username1 -t jumphost1 \
ssh -l username2 -t jumphost2 \
ssh -l username3 -t jumphost3" \
-l username4 server
username1@jumphost1's password:
Pseudo-terminal will not be allocated because stdin is not a terminal.
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
ssh_exchange_identification: Connection closed by remote host
와 함께 사용하는 것을 알고 nc
있지만 3 + 홉과 함께 사용하는 방법을 찾고 있으며이 옵션을와 함께 사용합니다 scp
. ssh_config
맨 페이지를 확인 했지만 정보가 매우 부족합니다.
편집하다
아래 제안 된대로 ProxyCommand
다른 중첩 된 것을 사용하려고 ProxyCommand
했지만 항상 다음 줄을 따라 무언가를 얻습니다.
debug3: ssh_init_stdio_forwarding: 192.17.2.2:2222
debug1: channel_connect_stdio_fwd 192.17.2.2:2222
debug1: channel 0: new [stdio-forward]
debug2: fd 4 setting O_NONBLOCK
debug2: fd 5 setting O_NONBLOCK
debug1: getpeername failed: Bad file descriptor
debug3: send packet: type 90
debug2: fd 3 setting TCP_NODELAY
debug3: ssh_packet_set_tos: set IP_TOS 0x10
debug1: Requesting no-more-sessions@openssh.com
debug3: send packet: type 80
debug1: Entering interactive session.
다행히도 키 설정을 해결해야하지만 , 그 이후로 7.3
-J
또는 그 ProxyJump
목적을 달성했습니다.
ssh -q -J user1@jumphost1,user2@jumphost2,user3@jumphost3 user@server
답변
nc
버전은 더 이상 사용하지 않는 것이 좋습니다. -W
최신 버전의 OpenSSH에서 제공되는 스위치를 사용하십시오 . 또한 구성을 다른 호스트에 복사 할 필요가 없습니다! 모든 구성은 호스트에서 수행해야 scp
하며 어떤 식 으로든 방해하지 않습니다 . 다음을 사용하여 파일 ~/.ssh/config
을 만드십시오 .
Host jumphost1
User username1
Host jumphost2
User username2
ProxyCommand ssh -W %h:%p jumphost1
Host jumphost3
User username3
ProxyCommand ssh -W %h:%p jumphost2
Host server
User username4
ProxyCommand ssh -W %h:%p jumphost3
그리고 사용하여 연결 ssh server
또는 사용 scp file server:path/
. oneliner를 주장하거나 ProxyCommand
중첩 에 대해 무엇을 의미하는지 확실하지 않으면 이미 지적했듯이 탈출의 지옥입니다.
ssh -oProxyCommand= \
'ssh -W %h:%p -oProxyCommand= \
\'ssh -W %h:%p -oProxyCommand= \
\\\'ssh -W %h:%p username1@jumphost1\\\' \
username2@jumphost2\' \
username3@jumphost3' \
username4@server
당신은 기본적으로 안으로 들어가야합니다.
답변
나는이 홉 을 두 번 했지만이 작업은 세 번 작동합니다. 가장 간단한 방법은 ~/.ssh/config
파일을 각 호스트에 설정하는 것입니다. 따라서 켜져 hosta
있고 hostd
via hostb
및 hostc`를 사용하려면 구성을 다음과 같이 설정할 수 있습니다.
에서 hosta:~/.ssh/config
:
Host hostd
User username
ProxyCommand ssh hostb nc %h %p 2> /dev/null
에서 hostb:~/.ssh/config
:
Host hostd
User username
ProxyCommand ssh hostc nc %h %p 2> /dev/null
에서 hostc:~/.ssh/config
:
Host hostd
User username
ProxyCommand ssh hostd nc %h %p 2> /dev/null
그런 다음 ssh hostd
체인의 모든 호스트에서이 작업을 수행 할 수 있습니다 hostd
.
프록시에 netcat을 사용해도 간섭하지 않습니다 scp
.
어떤 이유로 로컬 ~/.ssh/config
파일 을 사용하지 않으려면 다음을 수행하십시오 hosta
.
ssh -oProxyCommand='ssh -oProxyCommand=\'ssh -o ProxyCommand=\\\'ssh username@hostd nc %h %p 2>/dev/null\\\' username@hostc nc %h %p 2> /dev/null' username@hostb nc %h %p 2> /dev/null' username@hostd