SSH 리버스 양말 터널


26

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

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

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

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


1
작동하지 않거나 작동하지 않는 답변을 수락했기 때문에 질문의 가치가 사라집니다. 이 답변은 (응답자가 주석에서 언급 한) stackoverflow.com/questions/842021/…을 통해 수행합니다.
barlop

답변:


12

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

그래서...

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

나는 아래를 채우는 것이 "생각"할 것입니다 ...

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

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


아, 이것이 SO에 요청 된 것 같습니다 : stackoverflow.com/questions/842021/… 대답은 같은 아이디어입니다. 나는 그것이 효과가있을 것이라고 확신한다 ;-) 편집-그래, 하나는 내 것보다 옳았다. 나는 패치했다.
Pricey

사실, 나는 내 자신의 상황 에서이 간접 방법을 사용했습니다. 그러나 내 firend의 상황에서는 루트 권한이 없었기 때문에 sshd 서비스를 사용할 수 없으며 OpenSSH 클라이언트 만 있습니다. 그래서 직접적인 방법이 있다고 생각하지만 OpenSSH는 그렇지 않은 것 같습니다 ... 감사합니다
Berry

1
당신이 10.0.0.10에서 ssh를 실행 파일을 실행 말할 @barlop 해당하지 않습니다 작품은 -R은 10.0.0.10:9050에 전달 말한다 때문에 그러나 SOCKS 서버는 10.0.0.5에서 실행
barlop

1
@PriceChild 실제로 명령을 테스트 했습니까?
barlop

5
-1 당신은 그것을 테스트 귀찮게하지 않았으며 명령이 완전히 잘못되었습니다. 다른 SO 답변처럼 만들려고했지만 실패했습니다. A에서 B로 SSH 연결, 링크하는 ssh -D는 A에서 청취합니다. 귀하는 B에서 청취합니다. 듣고있는 쪽에서 SOCKS 프록시를 듣고 있습니다.
barlop

14

~ / .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 트릭은 필수입니다.


1
이것은 금메달의 가치가 있습니다.
다카 틴

명령이 수행하는 작업에 대한 자세한 설명을 제공 할 수 있습니까?
alonso s

3

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

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


2
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


이에 대한 참조를 제공 할 수 있습니까?
스캇

그런데 openssh-client 8.0에는 포트 ( ssh -R 127.0.0.3:1080 remote) 로 바인드 주소를 선택할 수없는 버그가 있습니다. 현재 역방향 SOCKS 프록시 를 포트 에만 바인드 할 수 있습니다 .
Adam Katz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.