Lösung 1:
Ihr Problem besteht darin, einen Listener an localhost:22 zu binden; es gibt bereits einen sshd, der darauf hört. Das Tunneln einer ssh-Verbindung durch eine ssh-Verbindung ist völlig legal, und ich mache das ständig, aber Sie müssen unbenutzte Ports für Ihre Weiterleitungs-Listener auswählen.
Versuchen Sie es
me% ssh [email protected] -L 2201:192.168.25.100:22
dann
me% ssh localhost -p 2201
Sie sollten auf Server B landen (es sei denn, es ist bereits etwas an mich gebunden:2201, in diesem Fall wählen Sie einen anderen Port).
Lösung 2:
Sie müssen keine SSH-Portweiterleitung verwenden, um über einen Proxy eine SSH-Verbindung zu einem internen Computer herzustellen. Sie können die ssh-Funktion verwenden, um einen Befehl auf dem ersten Server auszuführen, mit dem Sie sich verbinden, um eine ssh-Verbindung zu einem dritten Computer herzustellen.
ssh -t [email protected] ssh [email protected]
Der -t
Option zwingt ssh, ein Pseudo-TTY zuzuweisen, damit Sie einen interaktiven Befehl ausführen können.
Dies kann auch mit ssh-Schlüsseln funktionieren. Wenn Sie Ihren privaten und öffentlichen Schlüssel auf Maschine A und Ihren öffentlichen Schlüssel in den autorisierten Schlüsseldateien auf Maschinen B und C haben, können Sie den -A
verwenden Option zum Weiterleiten der Verbindung des Authentifizierungsagenten.
Lösung 3:
Ab OpenSSH 7.3 (Ende 2016) ist der einfachste Weg die ProxyJump-Einstellung. In Ihrem ~/.ssh/config
:
Host B
ProxyJump A
Oder auf der Befehlszeile, -J B
.
Lösung 4:
Ich habe eine andere Lösung verwendet. Ich habe einen ProxyCommand
verwendet Option (hier in ~/.ssh/config
):
Host myinsidehost1 myinsidehost2 myinsidehost3
ProxyCommand ssh externalhost ssh %h sshd -i
Dies richtet keinen Port-zu-Port-Tunnel ein, tunnelt stattdessen ssh unter Verwendung von Standard stdin/out. Diese Methode hat den Nachteil, dass tatsächlich drei SSH-Verbindungen zur Authentifizierung vorhanden sind. Aber um sich mit dem internen Host zu verbinden, geben Sie einfach ein:
ssh myinsidehost2
...also müssen Sie sich keine Gedanken über die Auswahl einer IP für diesen Tunnel machen.
Lösung 5:
Laut der SSH-Manpage ist ProxyCommand die richtige Methode
die Syntax lautet:
ProxyCommand ssh -W %h:%p [email protected] 2> /dev/null