
3홉 SSH 터널 연결을 위해 Putty를 어떻게 구성합니까? 2홉 SSH 터널 연결을 위해 Putty를 구성하는 방법을 알고 있지만 이제는 3홉으로 구성하는 방법을 찾고 있습니다. 누군가 우리가 그것을 달성할 수 있는 절차를 나에게 설명해 줄 수 있습니까?
두 홉의 경우 아래 방법을 따릅니다.
Windows 10(Putty) --> Linux Machine1(192.168.1.100) --> Linux Machine2(192.168.1.150)
- 세션 창에 대상 주소(192.168.1.150)와 포트 22가 지정되어 있습니다.
- 프록시 옵션에서는 중간 서버 IP(192.168.1.100)와 포트 22를 지정했습니다.
- 또한 telnet 명령에 대해 다음을 제공했습니다.
plink -agent -l %user %proxyhost -nc %host:%port
위의 설정은 2홉에 대해 잘 작동합니다. 하지만 이제 내 요구 사항은 3홉 SSH 터널입니다. 현재 항목을 수정하고 홉을 1개 더 추가하려면 어떻게 해야 하나요?
답변1
Linux Machines 1/2와 동일한 네트워크에 있는 추가 시스템에 연결하려는 것인지, 아니면 그 너머의 다른 네트워크(예: 172.22.1.x의 Machine 4)로 점프해야 하는지는 확실하지 않습니다.
단순히 Linux Machine 1/2와 동일한 192.168.1.x 네트워크에 있는 다른 컴퓨터에 접근하려는 경우 실제SSH 터널(Putty Connection -> SSH -> Tunnels
메뉴 아래에 있음) 필요한 만큼의 머신에 여러 터널을 설정할 수 있습니다.
실제로 세 번째 네트워크에 연결하려는 경우 원래 Putty 인스턴스에 정의된 터널을 통해 연결되는 다른 Putty 인스턴스를 열 수 있습니다.
- 로컬 시스템의 포트(예: 2222)를 Linux Machine2의 포트 22로 전달하는 터널을 Putty에서 정의합니다.
- 그런 다음 터널을 사용하는(예: Localhost:2222에 연결) Windows 머신에서 또 다른 Putty 인스턴스를 열고 추가 포트(예: 2223)를 Machine4(세 번째 홉)의 포트 22로 전달하는 새 터널을 정의합니다.
- Putty 인스턴스를 하나 더 열고 Localhost:2223에 연결하여 Machine4에 액세스합니다.
저는 2홉으로만 이 작업을 수행해 봤기 때문에 성능이 어떻게 될지는 모르겠습니다. 이상적인 솔루션은 아니지만 이것이 유일한 옵션인 경우에는 효과가 있을 수 있습니다.
편집: Windows/Putty에만 국한되지 않는 경우this (투명한 멀티홉 SSH)당신이 원하는 것을 할 수 있습니다. Windows로 제한되어 있는 경우,시그윈좀 더 유연한 SSH 도구가 있을 수 있습니다.
답변2
PuTTY를 사용한 멀티홉 터널
PuTTY -> jHost1(jIP1) -> jHost2(jIP2) -> 대상(dIP)
빠른 답변:
귀하의 접근 방식은 정확합니다. jHost1에 대한 plink를 jHost2에 대한 plink의 로컬 프록시로 사용하십시오.
plink user2@jHost2 -nc dIP:dPort -proxycmd "plink user1@jIP1 -loghost jHost1 -nc jIP2:jPort2"
추가 설명 및 주의사항:
-t
(두 plink 모두에서)을 사용하여터미널 신호작업(점프 호스트에서 원격 쉘을 호출하지 않기 때문에)있다일반 텍스트로 된 비밀번호(명령줄/PuTTY 구성에서)
-l user -pw password
사용되는 경우(PuTTY 자리 표시자 %proxypass를 사용하는 경우에는 중요하지 않음)- 암호 없이 개인 키를 지정하는 데 사용합니다
-i
. (표준 I/O는 PuTTY에서 사용되므로 입력할 수 없기 때문입니다.) - 또는
-agent
Pageant의 키를 사용하는 데 사용 -a
plink가 로컬로 실행되므로 에이전트 전달( )이 필요하지 않습니다.
- 암호 없이 개인 키를 지정하는 데 사용합니다
처음으로 명령줄에서 plink를 실행하여 추가 질문이 없는지 확인하세요. 일반적으로 "수신 패킷이 해독 시 왜곡되었습니다." 오류가 발생하면 plink에서 jHost의 SSH 키를 가져오라고 요청합니다.
jHost
및 의 사용법을 염두에 두십시오jIP
. 내jHost
말은논리 호스트 이름plink의 "known_hosts" 키 조회(Windows 레지스트리의 PuTTY 저장소)jIP
현재 홉에서 액세스할 수 있는 다음 홉의 이름/IP입니다. (보통 을(를) 다시 사랑할 수 없는 다른 네트워크에서 연결하고 있습니다jHost
.)- 외부 plink는
jHost2
연결이 프록시되고 DNS 조회가 전혀 없기 때문에 간단히 사용할 수 있습니다. - 내부 plink는 로컬 키 조회를 위해
jIP1
연결 하고 다음 홉에 대한 NetCat에 연결하는 데 사용해야 합니다.-loghost jHost1
-nc jIP2:jPort2
- 외부 plink는
당신이 사용해야하는 경우TCP 전달대상(허용되어야 함)에서 수행해야 할 유일한 작업은 마치 점프 호스트가 전혀 없는 것처럼 PuTTY에서 이를 구성하는 것입니다. 이는 대상에 대한 SSH 연결이 jHost2를 통해 터널링되고 이 연결이 차례로 jHost1을 통해 터널링되고 점프 호스트가 터널에 대한 통찰력을 갖지 못하기 때문입니다.
- 호스트를 점프하기 위해 ssh를 실행하고 대상에 도달하기 위해 ssh를 다시 실행하는 것과는 반대로,
<enter>~C<enter>
점프 호스트의 ssh 클라이언트로 이스케이프하려면 시퀀스를 사용하고-L
/-R
명령을 사용하여 동적으로 터널을 추가해야 합니다.
- 호스트를 점프하기 위해 ssh를 실행하고 대상에 도달하기 위해 ssh를 다시 실행하는 것과는 반대로,
TCP 전달 없음
plink -nc
( ssh -W
동등)은 점프 호스트를 통해 표준 I/O를 TCP 전달하는 로컬 프록시입니다. 점프 호스트에서 TCP 전달을 허용할 수 없는 경우 제한된 해결 방법으로 프록시 설정 없이 "연결 -> SSH -> 원격 명령"에서 ssh를 jHost1
사용하여 사용할 수 있습니다.ssh user2@jHost2 -t ssh user@Destination
이렇게 하면 점프 호스트에서 새 SSH 클라이언트를 시작할 수 있습니다(키가 있어야 함/비밀번호 다시 입력/에이전트 전달, 구성/known_hosts 중복...).