중간 호스트를 통한 안전한 터널 포트


23

VNC 포트를 내 집으로 다시 연결하려고합니다. 단일 호스트를 뛰어 넘어 실제 작업 시스템으로 홉핑해야합니다.

  • sittinghere 내 로컬 홈 머신이 될 것입니다
  • hopper 내가해야 할 중간 홉에 의해
  • overthere 원격 작업 기계가 될 것입니다

이 작업을 내 작업 시스템에 SSH로 연결할 수 있습니다.

ssh -t hopper "ssh -t overthere"

포트 전달을 사용하여 원격 포트 5900 overthere을 로컬 포트 ​​5900으로 전달하고 싶습니다 sittinghere. 그러나 hopper해당 컴퓨터의 모든 사람이 내 VNC 연결에 연결할 수 있으므로 포트에 공개적으로 바인딩하지 않고 수행 할 수 있습니다.

아무도 해당 포트에 액세스 할 수없는 상태로 해당 포트를 로컬 컴퓨터에 안전하게 전달할 수있는 방법이 hopper있습니까?


어떤 VNC 클라이언트를 사용하고 있습니까?
slm

답변:


18

SSH의 기본 기능을 사용하여 포트를 전달합니다. 에서 sittinghere실행 :

 ssh -v -N -L 5900:overthere:5900 user@hopper

VNC 클라이언트를 가리키면 localhost:5900트래픽은 다음에 overthere:5900설정된 SSH 연결 을 통해 터널링됩니다 .hopper


1
AFAIK에서이 솔루션은 5900이 로컬 (127.0.0.1) 인터페이스에만 바인딩 된 경우 터널이에 발생한 hopperhopper모든 트래픽을 (으) 로 전달하는 경우 도움이되지 않습니다 overthere:5900. 또는 주어진 인터페이스를 overthere:5900듣고 있다면 0.0.0.0작동하지만 작동하고 127.0.0.1있습니다.
Naftuli Kay

18

나는 ~/.ssh/config이것을하기 위해 SSH 해킹을 사용했다.

Host hopper
    User naftuli
    ForwardAgent yes

Host overthere
    User naftuli
    ForwardAgent yes
    ProxyCommand ssh -q hopper nc overthere 22

이것이하는 일은 내가 연결을 시도 할 때이다 ssh overthere에서 sittinghere, 그것은에 연결 hopper한 다음의 포트 22에 SSH 연결 프록시합니다 overthere(:에 SSH 즉 overthere).

여기에는 멋진 부작용이 있습니다 :

ssh -L 5900:localhost:5900 overthere "x11vnc -display :0 -localhost"

모든 것이 훌륭하게 작동하며 내가 말할 수있는 한 5900은에서 열리지 않고 hopper에서 overthere로 직접 전달됩니다 sittinghere.


덧붙여서, 나는 전에 주석에서 이것을 물어야했지만 당신이 우연히 해결 한 해결책은 x11nvc 매뉴얼 페이지 8-)에서 나온 것입니다. 사용중인 VNC 서버를 물어 보지 못했습니다.
slm

이것은 나에게 베 지주를 두려워하지만, 확실히 작동합니다!
데일 앤더슨

1
일부 Linux 배포판 (예 : Ubuntu 14.04)에서는 netcat-openbsd가 기본적으로 설치됩니다. 이 경우이 핵이 작동하지 않을 수 있습니다. 이 문제를 해결하려면 먼저 netcat-traditional 패키지 ( apt-get install netcat-traditional -y)를 설치해야합니다 . 그런 다음에 명시 적으로 지정해야합니다 nc(대체하여 설정 파일의 형식 nc과를 nc.traditional).
VeLKerr

@ Naftuli : 굉장합니다!
사라

1
@AlexanderPozdneev netcat .
taylorthurlow

1

통해 포트를 SSH 포트 sittinghere로 전달할 수 있습니다 . 그런 다음 해당 포트를 사용 하여에서 직접 연결할 수 있습니다 . 이 두 번째 SSH 세션 에서는 암호화 된 SSH 세션 만 표시 하면서 VNC 또는 원하는 다른 포트를 전달할 수 있습니다 .overtherehopperovertheresittingherehopper

첫 SSH 세션 :

ssh -f -N -L 7022:overthere:22 hopper

이제이 overthere구성을 ~/.ssh/configon 으로 추가 하여 SSH 클라이언트에 도달하는 방법을 알려주십시오sittinghere

Host overthere
    HostName hopper
    Port 7022
    HostKeyAlias overthere

두 번째 SSH 세션 :

ssh -f -N -L 5900:localhost:5900 overthere

또는 VNC 포트 터널이없는 일반 대화식 SSH 세션 만 :

ssh overthere

줄을 추가하지 않으려면 명령 줄에서 ~/.ssh/config연결하는 방법을 알려주십시오 overthere.

ssh -p 7022 hopper

... HostKeyAliasSSH가 없으면 overthere키 지문을 올바르게 확인할 수 없습니다 .

모든 명령 행은에서 실행됩니다 sittinghere.

덧붙여, 당신은 아마 사용 할 필요가없는 생각 ssh-t옵션을 선택합니다.


1

작업자와 가정용 PC 사이에 터널을 만드는 동안 먼저 호퍼를 연결하십시오.

ssh -f ismail@hopper -L 2222:overthere:22 -N

그런 다음 VNC 터널로 ssh ro를 덮어 씁니다.

ssh -p 2222 -f ismail@localhost -L 5900:localhost:5900

이제 vnc와 연결할 수 있습니다. 그런데 로컬 호스트를 청취하도록 vnc의 구성을 변경하십시오.


0

vncviewer명령 행에서 VNC 클라이언트 를 사용하는 경우 다른 호스트의 VNC 서버에 연결하기 전에 -via스위치를 사용하여 터널을 통과하도록 지시 할 수 있습니다 user@host.

$ vncviewer -via user@host localhost:0

vinagreGUI를 통해 SSH 터널을 통해 연결할 수도 있습니다 . 연결하려면 다음의 연결 대화 상자를 통해 이와 비슷한 연결을 설정하십시오 vinagre.

              ss # 1

SSH 터널 호스트를 통해 터널링이 연결됩니다.

    ss # 2

참고 문헌


0

다음 명령도 완벽하게 작동합니다

ssh -f -N -J hopper overthere -L 5900:localhost:5900

PostgreSQL 서버 postgres-server를 사용자 정의 포트 ( -p스위치)에 연결하고 사용자 정의 된 사용자 이름을 사용 하기 위해 추가 매개 변수로 테스트했습니다 .

ssh -f -N -J user1@jumphost -p 2222 user2@postgres-server -L 5432:localhost:5432

보시다시피 솔루션은 간단하며 ssh 또는 중간 단계의 구성 변경이 필요하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.