원격 SSH 포트 전달에 매개변수 전달

원격 SSH 포트 전달에 매개변수 전달

그림과 같이 두 개의 게이트웨이 뒤에 원격 서버가 있습니다. gw1은(는) 외부 세계에 공개되어 있지만 gw2에서만 액세스할 수 있습니다 gw1. Server에서만 액세스할 수 gw2있으며 가능한 여러 서버 중 하나일 수 있습니다. 내 클라이언트 컴퓨터에서 자동으로 on 으로 전달 ssh되도록 포트 전달을 구성하고 싶습니다 . 이것은 문제가 아닙니다. 나는 가지고있다:4432000gw1

HostName gw1
User user
ForwardAgent yes
LocalForward 443 localhost:2000

그리고 이것은 완벽하게 작동합니다. 이제 내가 에 갈 때 2000from 을 to the through gw1로 전달하고 싶습니다 . 내가 할 수있는:443Servergw2sshgw2

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 server1gw1을 통해 gw2에 연결하고 거기에서 443을 server1로 전달합니다.

이것이 하는 일: 는 ProxyCommandssh에게 먼저 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동일한 것을 달성하기 위해 비슷한 것을 추가할 수 있습니다. 쉘은 중단될 때까지 기다리며 쉘 프롬프트가 없습니다.

관련 정보