Попытка установить удаленную переадресацию порта ssh:
На моем удаленном хосте / etc / ssh / sshd_config
Указанные клиенты GatewayPorts
На моем локальном компьютере:
ssh -g -R 1234:0.0.0.0:8000 me@my-remote-host
С помощью отладки мы можем прочитать:
debug1: Authentication succeeded (publickey).
Authenticated to s1.bux.fr ([178.32.223.76]:22).
debug1: Remote connections from LOCALHOST:1234 forwarded to local address 0.0.0.0:8000
debug2: fd 3 setting TCP_NODELAY
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: remote forward success for: listen 1234, connect 0.0.0.0:8000
debug1: All remote forwarding requests processed
На удаленном хосте мы можем связаться с портом 1234 (WSGIServer/0.2 CPython/3.4.3
порт локальной машины 8000):
# http :1234
HTTP/1.0 302 Found
Content-Type: text/html; charset=utf-8
Date: Wed, 19 Oct 2016 13:26:00 GMT
Location: /accounts/login/
Server: WSGIServer/0.2 CPython/3.4.3
Vary: Cookie
X-Frame-Options: SAMEORIGIN
Мы можем просмотреть открытый порт:
# netstat -tupln | grep 1234
tcp 0 0 127.0.0.1:1234 0.0.0.0:* LISTEN 14460/1
tcp6 0 0 ::1:1234 :::* LISTEN 14460/1
Но с другой машины в мире я не могу связаться my-remote-host:1324
:
# http my-remote-host:1234
http: error: ConnectionError: HTTPConnectionPool(host='my-remote-host', port=1234): Max retries exceeded with url: / (Caused by NewConnectionError('<requests.packages.urllib3.connection.HTTPConnection object at 0xb6b2fbec>: Failed to establish a new connection: [Errno 111] Connection refused',)) while doing GET request to URL: http://my-remote-host:1234/
На my-remote-host нет брандмауэра:
# iptables -L
[sudo] password for bux:
Chain INPUT (policy ACCEPT)
target prot opt source destination
fail2ban-sshd tcp -- anywhere anywhere multiport dports ssh
fail2ban-ssh tcp -- anywhere anywhere multiport dports ssh
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain fail2ban-ssh (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
Chain fail2ban-sshd (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
Как нашел где это блокировка?
tcp 0 0 127.0.0.1:1234 0.0.0.0:* LISTEN 14460/1
Проблема очень хорошо видна в выводе netstat. Ваш удаленный компьютер прослушивает 127.0.0.1:1234, который доступен только для локального подключения с этого компьютера.
Чтобы ssh -g (параметр шлюза) работал, вы должны указать адрес с подстановочными знаками или какой-либо адрес интерфейса, доступный от внешнего клиента, например:
ssh -g -R 0.0.0.0:1234:0.0.0.0:8000 me@my-remote-host
Найдено решение https://superuser.com/questions/588591/how-to-make-ssh-tunnel-open-to-public:
Мы должны установить адрес привязки следующим образом:
ssh -R 0.0.0.0:1234:0.0.0.0:8000 me@my-remote-host
Из man ssh
:
-g Allows remote hosts to connect to local forwarded ports. If used on a multiplexed connection, then this option must be specified on the master process.
-L
для местный пересылка и -R
для удаленный пересылка. -g
не применяется для удаленного.