Ich muss per Proxy-Jump eine Verbindung zu einem Remote-Server herstellen. Dazu versuche ich, das Flag -J zu verwenden. Ich verstehe, dass die Syntax folgendermaßen aussieht:
ssh -J A B
Ich muss jedoch für beide Verbindungen Schlüsseldateien verwenden. Also habe ich Folgendes versucht:
ssh -J -i /path/proxy.pem user@proxy_host -i /path/target.pem user@target_host
Offensichtlich funktioniert es nicht, ich bekomme
option requires an argument -- i
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
[-D [bind_address:]port] [-E log_file] [-e escape_char]
[-F configfile] [-I pkcs11] [-i identity_file]
[-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec]
[-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address]
[-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]
[user@]hostname [command]
ssh_exchange_identification: Connection closed by remote host
Was ist in diesem Fall die richtige Inline-Syntax, ohne die SSH-Einstellungen zu bearbeiten? In diesem Fall macht es keinen Unterschied, auf welchem Server die Schlüssel gespeichert sind.
Antwort1
Ich verstehe, dass die Syntax folgendermaßen aussieht:
ssh -J A B
Ja, aber das ist nicht die ganze Geschichte. -J
ist kein eigenständiges Flag – es ermöglicht Ihnen nicht einfach, zwei unabhängige Sätze von Verbindungsoptionen in derselben Befehlszeile anzugeben, wie Sie es versuchen.
Stattdessen -J
erhält die Flagge den Namen des Zwischenhostsals Parameter, so wie wir -i <keyfile>
immer zusammen gehen, -J <proxy>
müssen wir auch zusammen bleiben.
Und selbst wenn Sie diese Option verwenden, ändert sich die allgemeine 'ssh'-Syntax nicht – es gibt immer noch keine Gruppierung, welche Optionen zu Host A und welche zu Host B gehören. Wenn Sie zwei '-i'-Optionen wie diese haben, versucht SSH einfachbeideTasten beim Herstellen jeder der beiden Verbindungen.
Der letzte Teil sollte jedoch kein Problem darstellen, da jeder Server einfach anzeigt, dass er den Schlüssel nicht akzeptiert, und SSH dann einen anderen versucht. Folgendes sollte also funktionieren:
ssh -J user@proxy_host -i /path/proxy.pem -i /path/target.pem user@target_host
└────────────────┘ └────────────────┘ └─────────────────┘
Wenn einem der Hosts jedoch nicht gefällt, dass mehrere Schlüssel ausprobiert werden, müssen Sie das -J in den ProxyCommand in Langform übersetzen:
ssh -o ProxyCommand="ssh -i /path/proxy.pem -W %h:%p user@proxy_host" -i /path/target.pem user@target_host