
그림과 같이 두 개의 게이트웨이 뒤에 원격 서버가 있습니다. gw1
은(는) 외부 세계에 공개되어 있지만 gw2
에서만 액세스할 수 있습니다 gw1
. Server
에서만 액세스할 수 gw2
있으며 가능한 여러 서버 중 하나일 수 있습니다. 내 클라이언트 컴퓨터에서 자동으로 on 으로 전달 ssh
되도록 포트 전달을 구성하고 싶습니다 . 이것은 문제가 아닙니다. 나는 가지고있다:443
2000
gw1
HostName gw1
User user
ForwardAgent yes
LocalForward 443 localhost:2000
그리고 이것은 완벽하게 작동합니다. 이제 내가 에 갈 때 2000
from 을 to the through gw1
로 전달하고 싶습니다 . 내가 할 수있는:443
Server
gw2
ssh
gw2
HostName gw2
LocalForward 2000 Server:443
서버의 IP는 매번 다를 수 있으므로 매개변수로 전달할 수 있나요?
답변1
포트 2000에 관심이 없다고 가정합니다. 실제로 목표는 포트 443을 클라이언트에서 서버로 전달하는 것입니다. 그리고 서버 역할을 하는 호스트 server1, server2, server3, ...이 있다고 가정합니다. 이것을 .ssh/config에 추가하면:
Match host server*
ProxyCommand ssh gw1 nc gw2 22
LocalForward 443 %h:443
그런 다음 예를 들어 ssh server1
gw1을 통해 gw2에 연결하고 거기에서 443을 server1로 전달합니다.
이것이 하는 일: 는 ProxyCommand
ssh에게 먼저 gw1에 연결하고 표준 출력을 로 파이프하도록 지시합니다 nc gw2 22
. 그러면 해당 스트림이 포트 22의 gw2로 전달됩니다. 그러면 gw1을 통해 gw2:22까지 클라이언트의 표준 입력용 터널이 생성됩니다. 그런 다음 ssh는 해당 터널을 통해 gw2에 대한 두 번째 SSH 세션을 엽니다. 일단 설정되면 LocalForward
포트 443이 server1( %h
명령줄에서 지정한 호스트 이름)로 전달됩니다.
Match 및 ProxyCommand에 대해 읽으려면 man ssh_config를 참조하세요.
명령은 이지만 ssh server1
실제로는 ssh를 gw2까지만 연결한 다음 거기에서 포트 443을 전달합니다. 쉘은 server1이 아닌 gw2에서 열립니다. 따라서 ssh -N server1
목표는 실제로 포트를 전달하는 것이므로 쉘을 열지 않도록 대신 실행하는 것이 좋습니다 . 불행하게도 .ssh/config에는 -N에 해당하는 것이 없지만 LocalCommand wait
동일한 것을 달성하기 위해 비슷한 것을 추가할 수 있습니다. 쉘은 중단될 때까지 기다리며 쉘 프롬프트가 없습니다.