PuTTY를 사용한 멀티홉 터널

PuTTY를 사용한 멀티홉 터널

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"

추가 설명 및 주의사항:

  1. -t(두 plink 모두에서)을 사용하여터미널 신호작업(점프 호스트에서 원격 쉘을 호출하지 않기 때문에)

  2. 있다일반 텍스트로 된 비밀번호(명령줄/PuTTY 구성에서) -l user -pw password사용되는 경우(PuTTY 자리 표시자 %proxypass를 사용하는 경우에는 중요하지 않음)

    • 암호 없이 개인 키를 지정하는 데 사용합니다 -i. (표준 I/O는 PuTTY에서 사용되므로 입력할 수 없기 때문입니다.)
    • 또는 -agentPageant의 키를 사용하는 데 사용
    • -aplink가 로컬로 실행되므로 에이전트 전달( )이 필요하지 않습니다.
  3. 처음으로 명령줄에서 plink를 실행하여 추가 질문이 없는지 확인하세요. 일반적으로 "수신 패킷이 해독 시 왜곡되었습니다." 오류가 발생하면 plink에서 jHost의 SSH 키를 가져오라고 요청합니다.

  4. jHost및 의 사용법을 염두에 두십시오 jIP. 내 jHost말은논리 호스트 이름plink의 "known_hosts" 키 조회(Windows 레지스트리의 PuTTY 저장소) jIP현재 홉에서 액세스할 수 있는 다음 홉의 이름/IP입니다. (보통 을(를) 다시 사랑할 수 없는 다른 네트워크에서 연결하고 있습니다 jHost.)

    • 외부 plink는 jHost2연결이 프록시되고 DNS 조회가 전혀 없기 때문에 간단히 사용할 수 있습니다.
    • 내부 plink는 로컬 키 조회를 위해 jIP1연결 하고 다음 홉에 대한 NetCat에 연결하는 데 사용해야 합니다.-loghost jHost1-nc jIP2:jPort2
  5. 당신이 사용해야하는 경우TCP 전달대상(허용되어야 함)에서 수행해야 할 유일한 작업은 마치 점프 호스트가 전혀 없는 것처럼 PuTTY에서 이를 구성하는 것입니다. 이는 대상에 대한 SSH 연결이 jHost2를 통해 터널링되고 이 연결이 차례로 jHost1을 통해 터널링되고 점프 호스트가 터널에 대한 통찰력을 갖지 못하기 때문입니다.

    • 호스트를 점프하기 위해 ssh를 실행하고 대상에 도달하기 위해 ssh를 다시 실행하는 것과는 반대로, <enter>~C<enter>점프 호스트의 ssh 클라이언트로 이스케이프하려면 시퀀스를 사용하고 -L/ -R명령을 사용하여 동적으로 터널을 추가해야 합니다.

TCP 전달 없음

plink -nc( ssh -W동등)은 점프 호스트를 통해 표준 I/O를 TCP 전달하는 로컬 프록시입니다. 점프 호스트에서 TCP 전달을 허용할 수 없는 경우 제한된 해결 방법으로 프록시 설정 없이 "연결 -> SSH -> 원격 명령"에서 ssh를 jHost1사용하여 사용할 수 있습니다.ssh user2@jHost2 -t ssh user@Destination

이렇게 하면 점프 호스트에서 새 SSH 클라이언트를 시작할 수 있습니다(키가 있어야 함/비밀번호 다시 입력/에이전트 전달, 구성/known_hosts 중복...).

관련 정보