Ja, das heißt GatewayPorts
bei SSH. Ein Auszug aus ssh_config(5)
:
GatewayPorts
Specifies whether remote hosts are allowed to connect to local
forwarded ports. By default, ssh(1) binds local port forwardings
to the loopback address. This prevents other remote hosts from
connecting to forwarded ports. GatewayPorts can be used to spec‐
ify that ssh should bind local port forwardings to the wildcard
address, thus allowing remote hosts to connect to forwarded
ports. The argument must be “yes” or “no”. The default is “no”.
Und Sie können localhost
verwenden statt M
in der Weiterleitung, da Sie an denselben Computer weiterleiten, an den Sie SSH-ing senden - wenn ich Ihre Frage richtig verstehe.
Der Befehl wird also zu diesem:
ssh -L 2222:localhost:8888 -N -o GatewayPorts=yes hostname-of-M
und sieht in netstat -nltp
so aus :
tcp 0 0 0.0.0.0:2222 0.0.0.0:* LISTEN 5113/ssh
Jetzt spricht jeder, der auf diese Maschine über Port 2222 TCP zugreift, tatsächlich mit localhost:8888, wie es in Maschine M zu sehen ist. Beachten Sie, dass dies nicht dasselbe ist wie eine einfache Weiterleitung an Port 8888 von M.
Es geht auch anders. Sie können mit iptables eine Portweiterleitung von S:2222 nach W:8888 einrichten. Einzelbefehl:
iptables -t nat -A PREROUTING -p tcp --dport 2222 \
-j DNAT --to-destination 1.2.3.4:8888
wobei 1.2.3.4 die IP-Adresse von M ist. Es heißt NAT (Network Address Translation).
Weitere Alternativen:netcat
(traditionell) oder socat
Auf dem Server (S):
socat tcp-listen:2222,reuseaddr,fork tcp:M:8888
oder
nc -l -p 2222 -c 'nc M 8888'
Details siehe:Einfache Möglichkeit, einen Tunnel von einem lokalen Port zu einem anderen zu erstellen?