Lassen Sie ssh Hostnamen aus der Konfiguration auflösen, wenn Sie den ProxyCommand- und den Netcat-Modus verwenden

16

Ich versuche, einige universelle Optionen für das Bouncen von ssh-Verbindungen einzurichten. Hier ist meine ~/.ssh/configDatei, abgekürzt:

Host *%via
  ProxyCommand ssh gateway -W $(echo %h | cut -d%% -f1) %p

Host gateway
  HostName gateway.example.com
  User username
  ForwardAgent yes
  IdentityFile keypathg

Host target
  User username
  HostName target.example.com
  IdentityFile keypatht

Wenn ich *%viadie HostAliase benutze, erhalte ich:

% ssh -vvv target%via
OpenSSH_5.9p1, OpenSSL 0.9.8y 5 Feb 2013
debug1: Reading configuration data /Users/myuser/.ssh/config
debug1: /Users/myuser/.ssh/config line 5: Applying options for *
debug1: /Users/myuser/.ssh/config line 12: Applying options for *%via
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: auto-mux: Trying existing master
debug1: Control socket "/Users/myuser/.ssh/tmp/target%via_22_myuser" does not exist
debug2: ssh_connect: needpriv 0
debug1: Executing proxy command: exec ssh -A gateway -W $(echo target%via | cut -d% -f1):22
debug1: permanently_drop_suid: 501
debug1: identity file /Users/myuser/.ssh/id_rsa type -1
debug1: identity file /Users/myuser/.ssh/id_rsa-cert type -1
debug1: identity file /Users/myuser/.ssh/id_dsa type -1
debug1: identity file /Users/myuser/.ssh/id_dsa-cert type -1
ssh_exchange_identification: Connection closed by remote host

Allerdings wenn ich das nutze

% ssh target.example.com%via

Ich habe den Zielserver getroffen, aber als falscher Benutzer und ohne Pubkey-Authentifizierung.

Ich denke, meine Frage an dieser Stelle ist, ob diese Methode des Bouncings, wenn sie verwendet wird ForwardAgent, meine gesamte ssh-Konfiguration / -Umgebung durchläuft oder nur Schlüssel. Wenn nur Schlüssel, können die ersteren in irgendeiner Weise verwendet werden?

Meine ssh-Version ist 5.9v1, das Gateway ist 5.9v1 und das Ziel ist 5.3p1. Ich glaube, -Wwurde in 5.4 eingeführt, aber das sollte für die letzte Box in der Schlange keine Rolle spielen? Die Nutzung der älteren Schule ncscheint nicht anders zu sein.

Ich habe überprüft, dass ich manuell zu jedem Feld in der Zeile ssh kann. Dadurch zeigt so , dass Host - Name Alias - Informationen nicht übergeben werden, als wenn sie auf Gateway, das kann ich nicht , ssh targetaber ich kann ssh target.example.com. Dies funktioniert mit pubkey auth. Gateway und Ziel haben übrigens den gleichen Benutzernamen, weshalb dies funktioniert, wenn keine Konfiguration gepusht wird.

Wenn ForwardAgentoder eine ähnliche Konfiguration diese Informationen nicht pushen kann, wie kann sie am besten umgangen werden, indem eine .ssh / config auf dem Gateway mit diesen Informationen gespeichert wird?

Joshua Hogendorn
quelle

Antworten:

14

Wow, danke, dass du diese Frage gestellt hast. Ich finde es selten, dass jemand SSH voll ausnutzt, und diese Frage trifft auf einige Bereiche.

Dies ist kein ProxyCommandProblem. Das ProxyCommandweist den lokalen ssh-Client einfach an, etwas in Vorbereitung zu tun, bevor versucht wird, mit dem Remote-Client zu sprechen. Ja, in unserem Fall sprechen wir mit einer anderen SSH-Sitzung, aber diese Sitzung -Wnimmt einfach unsere Eingaben entgegen und leitet sie an eine andere Maschine weiter. Sie können sich vorstellen, dass die vorbereitende SSH-Sitzung völlig unabhängig ist. Unvermeidliche Autoanalogie: Ihr Auto ist dasselbe, unabhängig davon, ob Sie eine Fähre fahren mussten, um von Punkt A nach Punkt B zu gelangen.

Dies ist kein ForwardAgentProblem. ForwardAgentLässt den lokalen Client eine Funktion bereitstellen, mit der lokale Schlüssel in der Umgebung der Remotesitzung verfügbar gemacht werden. Sie haben die Remote-Sitzung noch nicht eingerichtet.

Es ist ein .ssh/configFormatproblem. Beachten Sie die zweite und dritte Debug1-Zeile. Sie listen auf, welche Host-Zeilengruppen von Ihnen angewendet werden .ssh/config. Sie merken, dass das $ ssh target.example.com%viafunktioniert, aber als falscher Benutzername und Schlüssel. Nun, die Zeilengruppe für Host targetwird nicht gelesen (was den richtigen Benutzernamen und die richtige Schlüsseldatei liefern würde). Welche Strophen werden verwendet? *und *%via.

Wie bekomme ich diese Optionen zu bestehen? Interessanterweise entspricht der Platzhalter 0 Längenzeichenfolgen. Host target*passt auf target, target%via, target.example.comund target.example.com%via.

Und so stellt man sich die Frage, wie man .ssh/configauf der gatewayMaschine eine Hilfe einstellen würde . Nein, das würde es nicht. Es würde niemals gelesen werden. Alles passiert von unserer lokalen Maschine.

Alles was ich erklärt habe, nur Antworten, warum $ ssh target.example.com%viaes nicht funktioniert.

Sie bevorzugen $ ssh target%via. Zu Recht ist es bequemer. Die Kurzform schlägt fehl, da der Hostname targetnicht gefunden wird. es löst nicht auf. Warum spuckt ssh nicht aus ssh: Could not resolve hostname target: Name or service not known? Denn die ProxyCommandwurde bereits erfolgreich aufgebaut. Elemente einer ssh-Verbindung wurden erstellt, aber der Hostnamenfehler tritt dort auf, wo er nicht erwartet wird, und daher wird er mit der allgemeineren Nachricht bombardiert. Ich würde einen Fehlerbericht dazu einreichen, um herauszufinden, wo die Debug-Informationen verbessert werden könnten.

Abschließender Kommentar:

Ich mag die Host *%viaSyntax. Es ist sauber und doch flexibel. Ich hatte es zuvor gesehen Host *+*und es verwendet sowohl den ersten als auch den letzten Teil von %h(ost), um zu bestimmen, wohin es gehen soll. Aber es braucht ein bisschen mehr Mühe, um sich darüber Gedanken zu machen. Link: http://wiki.gentoo.org/wiki/SSH_jump_host

Hefeweizen
quelle