Ich versuche, einen SSH-Tunnel zu erstellen, um auf einen Remote-Server (A) zuzugreifen, auf den nur über einen anderen Server (B) zugegriffen werden kann. Ich habe einen Schlüssel auf meinem lokalen Computer (L), um zum Relay-Server (B) zu gelangen, und einen weiteren Schlüssel auf dem Relay-Server (B), um zum Zielserver (A) zu gelangen.
[lokaler Rechner(L) mit Schlüssel zum Relay-Server(B)] --> [Relay-Server(B) mit Schlüssel zum Zielserver (A)] --> [Zielserver (A)]
Ich habe eine ~/.ssh/config-Datei, die auf meinem lokalen Rechner (L) so aussieht:
Host relay.server(B)
Hostname relay.server
Port 22
User me
IdentityFile ~/.ssh/id_rsa
Host destination.server(A)
Hostname destination.server
Port 1122
User me
IdentityFile ~/.ssh/id_rsa
Und ich kann meinen Tunnel problemlos mit Folgendem zum Laufen bringen:
Ausführen des Befehls: ssh -N -L 1122:SERVER_PRIVATE_IP:22 relay.server(B)
auf meinem lokalen Computer (L). Dies fordert mich zur Eingabe eines Kennworts zum Entsperren des ersten Schlüssels auf und scheint dann zu hängen. Es wird keine Eingabeaufforderung zurückgegeben. Die Verwendung der -f
Option oder das Beenden mit einem &
hindert mich daran, das Kennwort einzugeben. Wenn ich ^C
diesen Befehl jedoch nach der Eingabe des Kennworts ausführe und dann eingebe, ssh destination.server(A)
werde ich aufgefordert, ein Kennwort zum Entsperren des zweiten Schlüssels einzugeben, woraufhin ich mit dem Zielserver (A) verbunden bin.
Ich suche nach einem einzelnen Befehl, mit dem ich von meinem lokalen Rechner (L) aus eine Verbindung zum Zielserver (A) herstellen kann und der mich auffordert, die zum Entsperren der einzelnen Schlüssel erforderlichen Passwörter einzugeben. Oder nach einem Vorschlag für eine alternative Organisationsmethode, damit ich von meinem lokalen Rechner (L) aus über den Relay-Server (B) direkt eine Verbindung zum Zielserver (A) herstellen kann.
Antwort1
Die kurze Antwort lautet: Sie brauchen
ProxyCommand
zumnc
Verbinden überForwardAgent
Schlüssel weitergeben.ssh/authorized_keys
Stellen Sie sicher, dass Ihr öffentlicher Schlüssel auf allen Servern vorhanden ist.
Host relay Hostname relay.server.fqdn.or.IP User me IdentityFile ~/.ssh/id_rsa ForwardAgent yes Host destination Hostname destination.server.fqdn.or.IP User me IdentityFile ~/.ssh/id_rsa ProxyCommand ssh -q relay "nc %h %p" ForwardAgent yes
Der längere Teil.
Die ProxyCommand
Option in der SSH-Konfiguration führt einen Befehl aus, wenn diese Umschließung Host
verwendet wird. Sie wird normalerweise mit nc
verfügbarem nmap.org verwendet, auch bekannt als ncat
und hat viele Optionen.
Im obigen Host destination
Eintrag der SSH-Konfiguration ProxyCommand
wurde Folgendes eingestellt ssh -q relay "nc %h %p"
: „SSH soll leise weitergeleitet und ausgeführt werden nc destination.server.fqdn.or.IP 22
. “
nc
stellt die Verbindung zwischen dem eingehenden SSH und dem Ziel her.
Das ForwardAgent yes
weist ssh an, den Schlüssel zu einem ssh-Agenten hinzuzufügen. ssh-Agenten behalten die Schlüssel im Auge und werden verwendet, um den richtigen Schlüssel bei Bedarf automatisch an einen Host weiterzuleiten. Das ForwardAgent yes
weist den Agenten an, den Schlüssel an einen anderen Agenten im Relay und dann erneut an das Ziel weiterzuleiten.
Damit das alles funktioniert, muss jeder Server, den Sie durchspringen, und letztendlich das Ziel den öffentlichen Schlüssel in seiner .ssh/authorized_keys
Datei haben, der Ihrem privaten Schlüssel (id_rsa) zugeordnet ist. Als Sie Ihren privaten Schlüssel (id_rsa) erstellt haben, sollte auch ein öffentlicher Schlüssel (id_rsa.pub) erstellt worden sein.
Wenn Sie Ihren öffentlichen Schlüssel nicht haben, können Sie ihn jederzeit aus dem privaten Schlüssel per ssh-keygen -y -f ~/.ssh/id_rsa
Kopieren/Einfügen erhalten. Beachten Sie, dass der öffentliche Schlüssel 2 oder 3 durch Leerzeichen getrennte Felder hat, abereinsLinie.
ssh relay
Bearbeiten Sie also den öffentlichen Schlüssel ~/.ssh/authorized_keys
(der möglicherweise nicht vorhanden ist, daher mkdir -p ~/.ssh
möglicherweise erforderlich ist) und fügen Sie ihn in eine neue Zeile ein (oder in die erste, wenn er nicht vorhanden ist).
Überprüfen Sie auf dem Relay-Server, ob es nc
in /bin oder /usr/bin vorhanden ist. Wenn nicht, müssen Sie es mit Ihrem Paketmanager installieren, entweder yum oder apt-get.
Führen Sie vom Relay-Server ssh destination
aus dasselbe Update durch ~/.ssh/authorized_keys
.
exit
bis zu Ihrem lokalen Rechner, und Sie sollten in der Lage sein,ssh destination
Antwort2
Neuere OpenSSH-Versionen ProxyJump
ermöglichen .ssh/config
:
Host relay
Hostname relay.server.fqdn.or.IP
User me
IdentityFile ~/.ssh/id_rsa
ForwardAgent yes
Host destination
Hostname destination.server.fqdn.or.IP
ProxyJump relay
User me
IdentityFile ~/.ssh/id_rsa