Ich verwende einen SSH-Befehl, um mich über einen Zwischenknoten über Proxyjump bei einem Remote-Knoten anzumelden. Der Remote- und der Zwischenknoten sind Linux-Server und mein Client ist ein Macbook. Dieser Befehl funktioniert und sieht folgendermaßen aus:
ssh -i .ssh/id_file -J user1@jump_node -A -D remote_port user2@remote_node
wobei ich jump_node und remote_node durch die Hostnamen der Zwischen- und Remote-Knoten und remote_port durch den SSHD-Port auf remote_node ersetze.
Meine erste und wichtigste Frage ist: Wie mache ich diesen Befehl zu einem Konfigurationsabschnitt?die ich in meine .ssh/config-Datei einfügen kann? Ich habe mir die Manpage von ssh angesehen und konnte die entsprechenden Konfigurationsoptionen -D
und -A
Flags (ich nehme an ForwardAgent yes
für -A
?) nicht finden. Könnte jemand bitte diese Flags erklären und wie man aus diesem Befehl einen korrekten Konfigurationsabschnitt macht?
Meine andere Frage ist weniger wichtig, würde mir aber helfen zu verstehen, was hier vor sich geht.Bei dieser zweiten Frage geht es um einen Fehler, der auftritt, wenn ich einen leicht anderen Befehl eingebe.
In den meisten Online-Dokumentationen, die ich lese, wird die Verwendung eines Befehls wie diesem empfohlen:
ssh -i .ssh/id_file -J user1@jump_node user2@remote_node:remote_port
aber wenn ich diesen Befehl versuche (sowohl mit als auch ohne -A
Flag), erhalte ich die folgende Fehlermeldung:
channel 0: open failed: connect failed: Name or service not known
stdio forwarding failed
kex_exchange_identification: Connection closed by remote host
Connection closed by UNKNOWN port 65535
Ich konnte nicht herausfinden, was dieser Fehler bedeutet und ob es einige Hinweise gibt, die ich verwenden könnte?
Antwort1
Sehenman 5 ssh_config
:
ForwardAgent yes
IdentityFile .ssh/id_file
Host jump_node
User user1
Host remote_node
ProxyJump jump_node
User user2
und lauf einfach ssh remote_node
.
Sie können auf diese Weise sogar eine Kette erstellen, wenn Sie ProxyJump
für „ jump_node
auch“ auch (ein anderes) angeben.
Das zweite Problem ist die ssh user2@remote_node:remote_port
falsche Syntax. Die Fehlermeldung lautet , weil versucht wurde (und fehlgeschlagen ist) , als Hostname Name or service not known
aufzulösen (ja, mit eingebettetem Doppelpunkt), nicht wie erwartet. Versuchen Sie, dasselbe ohne auszuführen , die Fehlermeldung wird etwas klarer sein.remote_node:remote_port
remote_node
-J
Ich würde dies als Versuch interpretieren, einen Port anzugeben, an dem der SSH-Server auf dem Remote-Knoten lauscht; verwenden Sie dazu einen -p
Befehlszeilenparameter oder Port
eine Host-Eintragsoption in einer Konfigurationsdatei.
Auch dies hat nichts mit dem -D
Befehlszeilenschalter zu tun. Und sein Argument ist kein "Remote-Port". Vielmehr macht dieser Schalter etwas ganz anderes, nämlich, dass er den SSH-Client dazu bringt,Hörenauf dem angegebenen Portauf dem lokalen Rechnerund akzeptieren SOCKS-Verbindungen, und der Remote-Server wird als Exit-Knoten verwendet. Sie können ihn beispielsweise im lokalen Browser so konfigurieren, dass er über den SSH-Tunnel auf das Internet zugreift und Dritte (Webserver) Ihre Verbindungen als von der IP des Remote-Hosts kommend sehen; niemand wird Ihre „echte“ IP sehen, außer dem SSH-Server (der in diesem Fall jedoch die Adresse des Jump-Servers sieht). So setzen SieDasIn der Konfiguration verwenden Sie DynamicForward
die Option in der Konfigurationsdatei.