SSH 리버스 양말 터널 원격으로 트래픽을 전달한 다음 다른

ssh -D 로컬 컴퓨터에서 양말 포트를 만들어 원격으로 트래픽을 전달한 다음 다른 장소로 전달할 수 있습니다.

ssh -L port:host:hostport로컬 시스템에서 포트를 수신하고 원격 시스템의 관점에서 트래픽을 “host : hostport”로 전달하십시오.

ssh -R port:host:hostportssh -L원격 시스템의 포트를 수신하고 로컬 시스템의 관점에서 트래픽을 “host : hostport”로 전달하는 의 대응 입니다.

그러나 ssh -D원격 컴퓨터에서 양말 포트를 여는 방법 은 무엇입니까? 즉, 트래픽을 로컬로 전달한 다음 다른 장소로 전달할 수 있습니까?



답변

-D& -L를 사용 하면 두 시스템간에 통신 할 수 있습니다.

그래서…

  • 로컬 시스템 -R에서 로컬 시스템의 sshd를 가리키는 원격 시스템에서 청취 포트를 작성하는 데 사용하십시오.
  • -D위에서 만든 포트를 가리키는 원격 컴퓨터에서 사용하십시오 .

나는 아래를 채우는 것이 “생각”할 것입니다 …

ssh remotehost -R remoteport:localhost:localport "ssh -D 9050 localhost -p remoteport"

위의 ‘ remotehost‘, ‘ remoteport‘& ‘ localport‘변경이 필요합니다. 양말 프록시는 9050에 형성됩니다.


답변

~ / .ssh / config의이 스 니펫을 사용하여 투명하게 얻을 수 있습니다.

Host sockstunnel
    ProxyCommand ssh -D 3128 localhost nc -q 1 localhost 22

Host target
    RemoteForward 3128 localhost:3128
    ProxyCommand ssh -W target:22 sockstunnel

세부

우리는 역동적 인 DynamicForward를 원합니다. 이것은 두 개의 ssh 명령을 사용하여 달성됩니다.

  • ssh -D 3128 localhost
  • ssh -R 3128:localhost:3128 target

이 방법으로 대상에는 SSH 클라이언트에 대한 SOCKS 터널이 있습니다.

내가 한 것은 대상에 로그인하는 동안 SOCKS 터널 생성이 투명하게 처리되도록 중간 체인을 통해 원격 대상에 도달하기 위해 고전적인 ssh 체인 방법을 사용하는 것입니다. -W는 ClearAllForwardings를 의미하므로 첫 번째 ProxyCommand + nc 트릭은 필수입니다.


답변

OpenSSH를 사용하여 리버스 양말 터널을 제공하는 기능이 없으므로 “원격”시스템에서 양말 프록시를 제공하는 ssh 명령을 실행해야합니다.

원격 시스템이 로컬 시스템으로 ssh 할 수없는 경우 먼저 로컬에서 원격으로 ssh 연결을 작성하여 포트 22를 2222로 전달하십시오. 그런 다음 원격 시스템 포트 2222의 로컬 시스템으로 ssh 할 수 있습니다 .


답변

local$ ssh -R 1080 remote
remote$ curl --socks5 localhost https://example.com

OpenSSH 7.6부터

ssh (1) : 역동적 전달을 지원합니다. 이 모드에서 ssh는 SOCKS4 / 5 프록시 역할을하며 원격 SOCKS 클라이언트가 요청한 대상으로 연결을 전달합니다. 이 모드는 -R 및 RemoteForward 옵션에 대해 확장 구문을 사용하여 요청되며 클라이언트에서만 구현되므로 서버를 지원하도록 업데이트 할 필요가 없습니다.

https://www.openssh.com/txt/release-7.6