글쎄, 이 질문을 다시 언급 하면 명령을 실행하고 있습니다.
ssh -R 8080:localhost:80 -N root@example.com
Mac에서. 그러나 터널로 연결되는 포트는 공개적으로 작동하지 않습니다. 원격 컴퓨터에서 로컬 포트를 열 수 있도록 명령을 실행하고 있습니다. 원격 컴퓨터의 로컬 호스트에서 포트를 열 때 작동하지만 로컬 컴퓨터에서 원격 컴퓨터의 공용 IP 주소에 액세스하려고하면 포트가 열려 있지 않은 것 같습니다. 누구나 액세스 할 수 있도록 IP에서 터널을 공개하려면 어떻게해야합니까?
편집 : 원격 측은 모든 인터페이스가 아닌 로컬 호스트에서만 바인딩되는 것처럼 보입니다.
편집 2 : 클라이언트는 Mac OS X 10.6이고 서버는 Linux Mint이지만 둘 다 OpenSSH입니다.
답변
ssh 매뉴얼 페이지를 확인하면 다음 구문을 -R
읽습니다.
-R [ bind_address :] 포트 : 호스트 : hostport
bind_address
생략 하면 (예에서와 같이) 포트가 루프백 인터페이스에서만 바인드됩니다. 모든 인터페이스에 바인딩하려면 다음을 사용하십시오.
ssh -R \*:8080:localhost:80 -N root@example.com
또는
ssh -R 0.0.0.0:8080:localhost:80 -N root@example.com
또는
ssh -R "[::]:8080:localhost:80" -N root@example.com
첫 번째 버전은 모든 인터페이스에 개별적으로 바인딩됩니다. 두 번째 버전은 일반 IPv4 전용 바인드를 작성하므로 IPv4를 통해 모든 인터페이스에서 포트에 액세스 할 수 있습니다. 세 번째 버전은 기술적으로 첫 번째 버전과 동일하지만 단일 바인딩 만 생성합니다. ::
즉, 기본적으로 IPv6을 통해 및 IPv4로 매핑 된 IPv6 주소 를 통해 IPv4를 통해 포트에 액세스 할 수 있습니다 (Windows, OpenBSD에서는 작동하지 않음) . ( [::]
그렇지 않으면 따옴표 로 해석 될 수 있으므로 따옴표가 필요합니다 .)
OpenSSH sshd
서버 를 사용GatewayPorts
하는 경우 서버 옵션을 활성화 ( yes
또는로 설정) 해야 서버에서clientspecified
파일 /etc/ssh/sshd_config
을 확인할 수 있습니다 . 그렇지 않으면 (이 옵션의 기본값은 no
) 서버는 항상 포트를 루프백 인터페이스에만 바인드합니다.
답변
편집하다:
-g
로컬 전달 포트에는 작동하지만 원하는 역방향 / 원격 전달 포트는 다릅니다.
당신이 원하는 것은 이것 입니다.
기본적으로에 example.com
설정 GatewayPorts=clientspecified
되어 /etc/ssh/sshd_config
있습니다.
— 이전 (잘못된) 답변 —
-g 옵션을 사용하십시오. ssh 매뉴얼 페이지에서 :
-g Allows remote hosts to connect to local forwarded ports.
답변
다음은 완성 된 답변입니다.
내가 사용하는 결국 ssh -R ...
터널링 및 사용하여 socat
네트워크 트래픽을 리디렉션에 대한 그 위에 127.0.0.1
:
터널이 127.0.0.1에 바인딩되었습니다.
ssh -R mitm:9999:<my.ip>:8084 me@mitm
socat :
mitm$ socat TCP-LISTEN:9090,fork TCP:127.0.0.1:9999
다른 옵션은 그 위에 로컬 전용 터널을 만드는 것입니다. 그러나 나는 이것이 훨씬 느립니다.
mitm$ ssh -L<mitm.ip.address>:9090:localhost:9999 localhost
답변
/ etc / ssh / sshd_config를 변경하지 않거나 변경할 수없는 경우 이중 전달을 사용할 수도 있습니다.
먼저 원격 시스템의 루프백 장치에서 임시 포트 (예 : 10080)로 전달한 다음 로컬 전달을 사용하여 모든 인터페이스에서 포트 10080을 80으로 리디렉션하십시오.
ssh -A -R 10080:localhost_or_machine_from:80 user@remote.tld "ssh -g -N -L 80:localhost:10080 localhost"
답변
“게이트웨이 포트”옵션을 사용하십시오.
ssh -g -R REMOTE_PORT:HOST:PORT ...
이를 사용하려면 GatewayPorts yes
서버에 ” “를 추가해야합니다 /etc/ssh/sshd_config
.
답변
점프 호스트 는 OpenSSH에 상당히 최근에 추가 된 것입니다. 이를 위해서는 중간에 대한 SSH 액세스가 필요하지만 추가 구성없이 작동해야합니다.
ssh -J root@example.com remoteuser@localhost -p 8080
이 명령은 SSH가 먼저 사용자 이름으로에 연결 root@example.com
한 다음 해당 시스템에서 포트 8080 localhost
(즉, 점프 호스트에서 원격 호스트로 터널링 된 포트)에 연결을 시작하도록 지시합니다 remoteuser
.
답변
~/.ssh/config
명령 행 매개 변수를 사용하는 대신 구성을 넣으려면 다음과 같이 시도하십시오.
Host REMOTE_HOST_NAME
RemoteForward \*:8080 127.0.0.1:80
원격 호스트의 방화벽에서 8080으로의 연결을 허용하고 구성 GatewayPorts
옵션 /etc/ssh/sshd
이로 설정되어 있지 않은지 확인 하십시오.no