SSH를 통해 개인 IP로

SSH를 통해 개인 IP로

실제 IP wxyz를 사용하여 인터넷과 ArchLinux VPS(컴퓨터 B)에 액세스할 수 있는 개인 IP 10.150.5.141(제한된 방화벽 포함)로 구성된 CentOS 컴퓨터(컴퓨터 A)가 있습니다.

컴퓨터 B에 액세스할 수 있는 다른 컴퓨터(컴퓨터 C)를 컴퓨터 A에 연결하지만 컴퓨터 C는 컴퓨터 A에 직접 연결할 수 없습니다(A의 자체 개인 네트워크에 있기 때문에).

터널이 다른 컴퓨터의 로컬 포트:포트로 열릴 수 있다는 것을 알고 있지만 그 반대는 어떻습니까?

컴퓨터 B를 통해 컴퓨터 A에 액세스 하고 싶지만 ssh컴퓨터 A의 네트워크가 제한되어 컴퓨터 B가 컴퓨터 A에 액세스할 수 없습니다(라우터에 액세스할 수 없기 때문에 나갈 수는 있지만 들어갈 수는 없음).

나는 다음과 같은 것을 원합니다 :

ssh -connect-to w.x.y.z:22 -open-port vvv -forward-to 10.150.5.141 -port 22

이렇게 하면 ssh w.x.y.z:vvv컴퓨터 C에서 이동할 때 개인 네트워크로 전달됩니다 10.150.5.141:22.

답변1

당신이 찾고 있는 것을 역방향 터널링이라고 합니다. ssh스위치를 통해 사용 가능 -R:

-R [bind_address:]port:host:hostport
       Specifies that the given port on the remote (server) host is to 
       be forwarded to the given host and port on the local side.  This 
       works by allocating a socket to listen to port on the remote side, 
       and whenever a connection is made to this port, the connection is
       forwarded over the secure channel, and a connection is made to host 
       port hostport from the local machine.

OP가 답변을 통해 발견한 대로 구문은 다음과 같습니다.

$ ssh -f -N -R vvv:localhost:22 w.x.y.z

네트워크에 2대의 컴퓨터가 있고 lappy다음 remotey명령을 실행합니다 lappy.

$ ssh -f -N -R 12345:localhost:22 remotey

작동하는지 확인할 수 있습니다.

$ ps -eaf|grep "[l]ocalhost:22"
saml     27685     1  0 11:10 ?        00:00:00 ssh -f -N -R 12345:localhost:22 remotey

이제 ssh혼자 원격 시스템으로 이동하여 remotey이 명령을 실행하면 원격 시스템의 로컬 인터페이스에서 포트 12345의 연결을 수락하는 것을 볼 수 있습니다.

$ netstat -an|grep :12345
tcp        0      0 127.0.0.1:12345             0.0.0.0:*                   LISTEN      
tcp        0      0 ::1:12345                   :::*                        LISTEN      

연결 테스트

역방향 SSH 터널이 다음과 같이 작동하는 것을 볼 수 있습니다.

  1. 로그인remotey

    [user@lappy ~]$ ssh remotey
    
  2. 역방향 터널 포트 테스트

    [user@remotey ~]$ ssh -p 12345 localhost
    
  3. 이제 다시 라피로 돌아갈 시간

    user@localhost's password: 
    Last login: Thu Aug  1 17:53:54 2013
    /usr/bin/xauth:  creating new authority file /home/user/.Xauthority
    [user@lappy ~]$ 
    

localhost( ) lo이외의 인터페이스에 포트가 있습니까 ?

이와 같은 명령을 시도했지만 작동하지 않는 것 같거나 항상 lolocalhost( ) 인터페이스의 포트에 바인딩되어 있으면 머리가 긁힐 수 있습니다.

예를 들어:

lappy$ ssh -f -N -R remotey:12345:lappy:22 remotey

노트:이 명령은 포트 12345@remotey를 열고 모든 연결을 포트 22@lappy로 터널링한다는 의미입니다.

그런 다음 리모컨에서 다음을 수행합니다.

remotey$ netstat -an|grep 12345
tcp        0      0 127.0.0.1:12345              0.0.0.0:*                   LISTEN   

무슨 일이 일어나고 있는지는 sshd구성이 이 작업을 허용하지 않는다는 것입니다. 실제로 이 기능( )을 활성화하지 않으면 터널 포트를 localhost 이외의 다른 포트에 바인딩 GatewayPorts할 수 없습니다 .ssh

게이트웨이 포트 활성화

remotey$ grep GatewayPorts /etc/ssh/sshd_config
#GatewayPorts no

활성화하려면 다음 파일을 편집하세요 /etc/ssh/sshd_config.

GatewayPorts clientspecified

다시 시작하세요 sshd.

remotey$ sudo service sshd restart

이제 다시 시도하면 원하는 효과를 볼 수 있습니다.

lappy$ ssh -f -N -R remotey:12345:lappy:22 remotey

이번에는 원격으로 주의 깊게 확인하세요.

remotey$ netstat -anp | grep 12345
tcp        0      0 192.168.1.3:12345           0.0.0.0:*                   LISTEN      9333/sshd

노트:sshd위에서 는 프로세스가 이제 포트 12345의 연결을 위해 IP 주소 192.168.1.3의 인터페이스에서 수신 대기하고 있음 을 알 수 있습니다 .

테스트 연결(이중 부분)

이제 이 테스트에 대한 설정을 변경했습니다. 가장 큰 차이점은 더 이상 localhost에 연결할 필요가 없다는 것입니다!

  1. 로그인remotey

    [user@lappy ~]$ ssh remotey
    
  2. 역방향 연결 테스트

    [user@remotey ~]$ ssh -p 12345 remotey
    
  3. 이제 다시 라피로 돌아갈 시간

    root@remotey's password: 
    Last login: Wed Aug 21 01:49:10 2013 from remotey
    [user@lappy ~]$ 
    

인용하다

답변2

컴퓨터 B는 컴퓨터 A에 연결할 수 없으므로 먼저 컴퓨터 A에서 원격 터널을 열어야 합니다.

ssh user@computerB -R vvv:localhost:22

답변3

그것은 중요하지 않습니다. 나는 답을 찾았습니다.

ssh -f -N -R vvv:localhost:22 w.x.y.z

컴퓨터 A에서

편집: TL;DR, 올바른 해결책:

ssh -f -N -R w.x.y.z:vvv:localhost:22 w.x.y.z

관련 정보