다음과 같은 SSH 터널 레이아웃을 설정하려고 합니다.
- 클라이언트 A(Ssh 서버가 활성화되지 않음)는 서버 S와의 SSH 연결을 시작합니다.
- ocks 서버는 S:yyyy 서버에서 열리고 모든 데이터는 클라이언트 A를 통해 전송됩니다.
- 클라이언트 B는 서버 S의 양말 서버에 연결하고 tcp 데이터는 클라이언트 A를 통해 인터넷으로 라우팅됩니다.
가능한 해결 방법 중 하나는 클라이언트 A에 프록시 서버를 추가하고(localhost:xxxx에 바인딩) 이를 클라이언트 ssh -R yyyy:localhost:xxxx Server
A 에서 실행하는 것입니다. 이것은 목표를 달성할 것입니다. 그러나 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
이것이 누군가에게 도움이 될지 확실하지 않습니다. 여기에 제가 구축한 설정 다이어그램이 있습니다...
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