Ich kann den Jump-Host-Server B von meinem lokalen Rechner A aus über SSH erreichen ssh B
.
Server C ist nur adressierbar (hat die Adresse C.internal) und von B über erreichbar ssh C
.
Wie greife ich per SSH direkt von meinem lokalen Computer auf C zu?
Wie würden der SSH-Befehl und die Konfigurationsdatei aussehen?
SSH-Konfiguration auf A:
Host B
User userB
HostName B.example.com
IdentityFile ~/.ssh/keyB
SSH-Konfiguration auf B:
Host C
HostName C.internal
User userC
IdentityFile ~/.ssh/keyC
Ist dies möglich, ohne ~/.ssh/keyC
vom Host B auf die lokale Maschine A zu kopieren?
Antwort1
Es gibt mehrere Optionen, aber keine davon ist ein „Einzelbefehl“:
Sie könnten einen SSH-Befehl an B ausführen, der lediglich einen zweiten SSH-Befehl an C ausführt. Sie müssen die -t
Option hinzufügen, damit es für interaktives SSH funktioniert:
ssh -t hostB "ssh hostC"
ssh -t hostB "ssh -t hostC htop"
ssh hostB ssh hostC ls -la /etc
Wenn Sie eine Möglichkeit suchen, per SSH „direkt“ von A nach C zu gelangen, benötigen Sie eine zusätzliche Vorrichtung, um eine SSH-Agent-Verbindung weiterzuleitenvon Bzum lokalen System (also das Gegenteil von dem, was ssh -A
normalerweise passieren würde).
Stellen Sie per SSH eine Verbindung zu Host B her und starten Sie dann einen SSH-Agenten unter einem manuell angegebenen Pfad. Verwenden Sie die SSH-Funktion „Stream Forward“, um lokalen Clients den Zugriff auf den Remote-Agentenprozess zu ermöglichen:
HostA$ ssh -t -L /tmp/agent:/tmp/agent HostB \ "ssh-agent -a /tmp/agent sh -c 'ssh-add ~/.ssh/keyC && sleep infinity'"
(Die ssh/config-Option ist
LocalForward
.)Solange die obige Verbindung besteht, können Sie mit der regulären ProxyJump-Konfiguration eine Verbindung von HostA zu HostC herstellen und dabei Schlüssel verwenden, die nur auf HostB vorhanden sind:
HostA$ export SSH_AUTH_SOCK=/tmp/agent HostA$ ssh -J HostB HostC
(Die ssh/config-Optionen sind
IdentityAgent
undProxyJump
.)
Eine andere Möglichkeit besteht darin, von B nach A zu kopieren keyC
und zu speichernauf sicherer Hardwarewie ein TPM-Chip oder eine Smartcard (ein Yubikey mit PIV-Modus zählt auch). Dies ermöglicht die lokale Verwendung des Schlüssels auf Maschine A, ohne dass die Gefahr besteht, dass er gestohlen wird.
tpm2-pkcs11
(Für TPM2.0 unter Linux können Sie entweder oder verwenden ssh-tpm-agent
; TPM2.0 unter Windows kann über PuTTY-CAC verwendet werden. Für Yubikeys mit PIV gibt es PKCS#11-Module sowohl für Windows als auch für Linux. Ich verwende einen eToken 5110 von Ebay. Es gibt auch eine Möglichkeit, FIDO2-Schlüssel mit SSH zu verwenden, aber dazu müsste ein neuer Schlüssel generiert werden.)
Antwort2
Sie benötigen eine ssh_config-Datei wie global /etc/ssh/ssh_config
oder als Benutzer ~/.ssh/config
:
Host B
HostName 10.0.0.1
User username_on_B
IdentityFile ~/.ssh/id_rsa_for_B
ForwardAgent yes
# final destination
Host C
HostName C.internal
User your_username_on_C
ProxyJump B
IdentityFile ~/.ssh/id_rsa_for_C
Jetzt A
können Sie von aus ssh
C
.