SSH-Tunnel zum Entsperren des Schlüssels unterbrochen - Suche nach einem einzelnen Befehl

SSH-Tunnel zum Entsperren des Schlüssels unterbrochen - Suche nach einem einzelnen Befehl

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 -fOption oder das Beenden mit einem &hindert mich daran, das Kennwort einzugeben. Wenn ich ^Cdiesen 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

  • ProxyCommandzum ncVerbinden über
  • ForwardAgentSchlüssel weitergeben
  • .ssh/authorized_keysStellen 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 ProxyCommandOption in der SSH-Konfiguration führt einen Befehl aus, wenn diese Umschließung Hostverwendet wird. Sie wird normalerweise mit ncverfügbarem nmap.org verwendet, auch bekannt als ncatund hat viele Optionen.

Im obigen Host destinationEintrag der SSH-Konfiguration ProxyCommandwurde Folgendes eingestellt ssh -q relay "nc %h %p": „SSH soll leise weitergeleitet und ausgeführt werden nc destination.server.fqdn.or.IP 22. “

ncstellt die Verbindung zwischen dem eingehenden SSH und dem Ziel her.

Das ForwardAgent yesweist 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 yesweist 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_keysDatei 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_rsaKopieren/Einfügen erhalten. Beachten Sie, dass der öffentliche Schlüssel 2 oder 3 durch Leerzeichen getrennte Felder hat, abereinsLinie.

ssh relayBearbeiten Sie also den öffentlichen Schlüssel ~/.ssh/authorized_keys(der möglicherweise nicht vorhanden ist, daher mkdir -p ~/.sshmö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 ncin /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 destinationaus dasselbe Update durch ~/.ssh/authorized_keys.

exitbis zu Ihrem lokalen Rechner, und Sie sollten in der Lage sein,ssh destination

Antwort2

Neuere OpenSSH-Versionen ProxyJumpermö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

verwandte Informationen