Ich suche nach einer einfachen Möglichkeit, SSH von meinem lokalen Computer A über einen Proxy B zu einem Zielhost C. Der private Schlüssel, der mit dem öffentlichen Schlüssel auf C verbunden ist, ist auf B, und ich kann nicht Lege diesen Schlüssel auf meinen lokalen Computer. Irgendwelche Tipps?
Außerdem möchte ich in der Lage sein, dies mit ~ / .ssh / config zu tun.
Vielen Dank!
Antworten:
Schema:
Voraussetzungen:
A
läuft ssh-agent;A
zugreifen könnenB
;B
zugreifen könnenC
;A
ssh public key ist in vorhandenB:~/.ssh/authorized_keys
B
ssh public key ist in vorhandenC:~/.ssh/authorized_keys
In
~/.ssh/config
aufA
, fügenWenn sich Ihr privater SSH-Schlüssel auf B an einem nicht standardmäßigen Speicherort befindet, fügen Sie den Pfad danach hinzu
ssh-add
.Sie sollten nun in der Lage sein , den Zugriff auf
C
vonA
:quelle
ProxyJump B
. Quelle: Wikibooksnc
?ForwardAgent yes
vor demProxyJump
Befehl hinzufügen .Überprüfen Sie, ob Folgendes funktioniert.
Verwenden Sie den folgenden Befehl, wenn Sie den auf B gespeicherten Schlüssel verwenden möchten.
Hier geben wir den Befehl
ssh -i /path/to/identity_on_B C
an, der auf B anstelle einer Login-Shell ausgeführt werden soll.quelle
Ich habe das jetzt ausgearbeitet. Hier ist die Lösung, die ziemlich einfach ist. Ich hätte es früher sehen sollen:
~ / .ssh / config:
'B' ist der Proxy-Server, durch den Sie springen. Es sollte so konfiguriert werden, wie Sie normalerweise den Zugriff auf einen Server konfigurieren würden.
'C' ist der Zielhost. Es muss so konfiguriert sein, dass 'B' im Verbindungsprozess verwendet wird. Die Identitätsdatei in 'C' ist der Pfad zum SSH-Schlüssel in 'B'. Der ProxyCommand verwendet Netcat, um die Verbindung zu 'C' von 'B' aus zu öffnen. Netcat oder nc muss auf 'B' installiert sein.
Hoffe das hilft anderen.
quelle
Ich habe ein einfaches Skript geschrieben, um im Grunde genommen meine SSH-Schlüssel auf der Remote-Instanz aufzulisten und dann den ausgewählten zu meinem lokalen SSH-Agenten hinzuzufügen. Das ist nicht sehr sauber, aber ich kann alle Schlüssel an einem entfernten Ort anstatt vor Ort aufbewahren.
Hier ist das Skript, wenn jemand interessiert ist:
quelle
quelle
Machen:
ssh someuser@IP_D
so dass
A -> B-> C -> D
wo A der Host ist, auf dem Sie sich befinden,Bearbeiten Sie Ihre lokale ~ / .ssh / config wie folgt:
Diese Antwort basiert auf der gewählten Antwort. Ich musste herausfinden, wie verschiedene Benutzer in das gesamte Szenario passen.
Das funktioniert bei mir. HTH.
quelle
Schneeballs Antwort hat mir sehr geholfen. Ich habe jedoch einige Änderungen am Befehl vorgenommen und wollte erklären, wie es funktioniert. In dieser Situation:
Ändern Sie Ihre
~/.ssh/config
Datei und fügen Sie den Host hinzu,B
über den Sie springen möchten, genau wie Sie normalerweise einen Host konfigurieren würden:Dann fügen Sie den Host hinzu
C
, auf dem Sie landen möchten:Beachten Sie
ProxyCommand
, wo:ssh -T -q
gibt an, dass kein Pseudo-TTY zugewiesen werden soll (-T
) und dass es ruhig sein soll (-q
);B
wir uns auf dem Sprunghost befinden , fügen wir den Schlüssel zu den SSH-Schlüsseln vonA
through hinzussh-add
.-o 'ForwardAgent yes'
.ssh-add -t 1
gibt an, dass der Schlüssel nur für die 1 Sekunde hinzugefügt werden soll, die für die Authentifizierung beim endgültigen Host C erforderlich ist.nc %h %p
initiiert schließlich einenetcat
Verbindung zum endgültigen Host%h
am Port%p
(beides wird von SSH basierend auf den Informationen in der~/.ssh/config
Datei ausgefüllt ).Wenn Sie einen benutzerdefinierten Schlüssel für
B
die Verwendung angeben müssen , können Sie dies tun, indem Sie dasssh-add
Teil ändern :quelle