역동적 SSH 포트 전달을 생성하는 방법

역동적 SSH 포트 전달을 생성하는 방법

다음과 같은 SSH 터널 레이아웃을 설정하려고 합니다.

  1. 클라이언트 A(Ssh 서버가 활성화되지 않음)는 서버 S와의 SSH 연결을 시작합니다.
  2. ocks 서버는 S:yyyy 서버에서 열리고 모든 데이터는 클라이언트 A를 통해 전송됩니다.
  3. 클라이언트 B는 서버 S의 양말 서버에 연결하고 tcp 데이터는 클라이언트 A를 통해 인터넷으로 라우팅됩니다.

가능한 해결 방법 중 하나는 클라이언트 A에 프록시 서버를 추가하고(localhost:xxxx에 바인딩) 이를 클라이언트 ssh -R yyyy:localhost:xxxx ServerA 에서 실행하는 것입니다. 이것은 목표를 달성할 것입니다. 그러나 SSH를 사용하는 것만큼 깨끗하지는 않습니다.

A의 SSH 클라이언트와 S의 SSH 서버를 사용하여 이를 달성할 수 있습니까? 이는 SSH를 통한 역동적 포트 전달과 같습니다. A에서 S로 생성한 다음 어떻게든 이 터널 위에 S에서 A로 두 번째 터널을 ssh -D설정합니다 . ssh -D조금 혼란스럽고 가능한지 확실하지 않습니다.

답변1

오픈SSH 7.6역동적 프록시를 기본 옵션으로 도입합니다. 완전히 클라이언트 측에서 구현되므로 서버 측에서 업데이트가 필요하지 않습니다.

ssh -R 1080 server

답변2

나는 이것을 찾고 있었고 동일한 (또는 유사한) 문제에 직면했습니다.스택 오버플로.

클라이언트 A에서 ssh -R \*:24680:localhost:12345 serverS(여전히 클라이언트 A에서) ssh -D 12345 localhost[1]

필요localhost 뿐만 \*아니라 서버 S의 공용 IP 주소에 바인딩됩니다.

그런 다음 클라이언트 B에서 양말 서버에 연결하십시오.serverS:24680


[1] 편집: 클라이언트 A에 SSH 서버가 없으면 자체적으로 SSH를 실행할 수 없기 때문에 이것이 작동하지 않는다는 것을 방금 깨달았습니다. 클라이언트 A에는 SSH 서버가 있지만 서버 S에는 설정에 액세스할 수 없는 설정을 고려하고 있습니다. 하지만 비슷한 설정을 설치할 수 있으면 계속 작동합니다.양말 서버클라이언트 A에서 포트 12345에서 엽니다.

답변3

이것이 누군가에게 도움이 될지 확실하지 않습니다. 여기에 제가 구축한 설정 다이어그램이 있습니다...

SOCKS 프록시를 사용한 SSH 역방향 터널

MACHINE_B에는 두 가지 프로세스가 표시됩니다.

MACHINE_A(올리브)에 대한 SSH 클라이언트 연결:

ssh -R 127.0.0.1:22344:127.0.0.1:4444 -i privkey.sshkey -N user_a@machine_a

포트 4444(짙은 녹색)에서 SOCKS 서버로 작동하는 SSH 클라이언트:

ssh -D localhost:4444 -N user_c@localhost

포트 22344(올리브)에서 수신 대기하는 재생 서버인 MACHINE_A에 프로세스가 있습니다.

MACHINE_A의 연한 녹색 프로세스가 연결을 요청하면 MACHINE_B의 연한 녹색 프로세스가 나타나야 합니다.

답변4

매우 간단합니다.

로컬 측(서버 S)에서 openssh 서버를 시작합니다. 기본적으로 포트 22에서 SSH 서버가 시작됩니다. 필요한 경우 /etc/ssh/sshd_config 파일에서 이 포트를 변경할 수 있습니다.

 service ssh start

원격 측(클라이언트 A)에서 양말 프록시를 시작하고 원격 포트를 로컬로 설정하여 양말 프록시에 연결합니다.

 ssh -N -D 127.0.0.1:8888 -p 22 <server-s>
 ssh -N -R 2222:127.0.0.1:8888 -p 22 <server-s>

로컬 측(서버 S)에서는 예를 들어 포트 2222의 양말 프록시 설정을 사용하여 Google에 연결합니다.

 curl --socks5 127.0.0.1:2222 https://www.google.com

관련 정보