METHODE 1 (benutze ssh-key auf inter)
Wenn Sie den Authentifizierungsablauf beibehalten möchten
local -- authenticate --> inter -- authenticate (ask password) --> final
Dies ist mit .ssh / config proxyhost nicht möglich.
Was Sie brauchen, ist ein Bash-Shell-Alias (ich hoffe, Sie verwenden Bash).
In ~/.bashrc, fügen Sie folgende Zeile
alias ssh-final='ssh -t inter ssh user2@final.com'
Geben Sie in der Eingabeaufforderung einfach Folgendes ein
ssh-final
finalAbschnitt in ~/.ssh/configwird nicht verwendet.
Verbindungsdetails (1)
ssh -t inter ssh user2@final.com kann wie folgt angezeigt werden
local# ssh inter
inter# ssh user2@final.com
localist nur "reden" mit inter. Es gibt keine direkte oder indirekte SSH-Verbindung zwischen localund final. localzeigt nur die Ausgabe von ssh user2@final.com.
METHODE 2 (benutze ssh-key auf local)
Authentifizierung mit demselben SSH-Schlüssel
Host inter
User user1
HostName inter.example.com
Host final
User user2
Hostname <final.com / final IP Address>
Port 22
ForwardAgent yes
ProxyCommand ssh inter nc %h %p
Lokal kopieren ~/.ssh/id_ras.pubnach
/home/user1/.ssh/authorized_keys in `inter`
/home/user2/.ssh/authorized_keys in `final`
Verbindungsdetails (2)
SSH Tunneling
Bevor wir ins Detail gehen ProxyCommand, schauen wir uns das folgende Beispiel an
Schritt 1 im Terminalfenster 1
local# ssh inter -L 2000:final.com:22
Schritt 2 im Terminalfenster 2
local# ssh localhost -p 2000
In Terminal 1 wird ein Tunnel zwischen dem lokalen Port 2000 und dem final.com-Port 22 eingerichtet. Alles, was an den lokalen Port 2000 gesendet wird, wird an den final.com-Port 22 weitergeleitet und umgekehrt.
In Terminal 2 stellt ssh eine Verbindung zum lokalen Port 2000 her, kommuniziert jedoch tatsächlich mit final.com-Port 22, dem sshd.
Beim Tunneln wird der lokale ssh-Client in Schritt 2 direkt mit final.com sshd verbunden.
Die "Ausgabe" des lokalen Ports 2000 ist "roher" ssh-Daemon-Verkehr.
Die übliche Verwendung eines solchen Tunnels besteht darin, auf einen internen Webserver oder einen E-Mail-Server zuzugreifen. Das Folgende ist ein Beispiel für einen Webserver
local# ssh inter -L 2000:final.com:80
Verwenden Sie im Browser die folgende URL
http://localhost:2000
Die beiden Endpunkte des Tunnels sind der lokale Port 2000 und der final.com-Port 80.
Verkehr kommt in und aus dem Tunnelendpunkt "wie besehen". Nennen wir das "rohen" Verkehr.
ProxyCommand
Host final
User user2
Hostname <final.com / final IP Address>
Port 22
ForwardAgent yes
ProxyCommand ssh inter nc %h %p
Das ProxyCommandgeht noch einen Schritt weiter. Es überspringt den Schritt des Erstellens eines lokalen Ports und stellt eine Verbindung zu diesem her.
Ein ssh-Client führt jeden Befehl aus, der dahinter steht ProxyCommand, und behandelt die Ausgabe dieses Befehls als "unformatierten" Datenverkehr. Es hält sich am lokalen Endpunkt fest und stellt dann eine SSH-Verbindung her.
Warum arbeitet einer den anderen nicht?
Der folgende Befehl
ssh inter nc final.com 22
Im Grunde bedeutet (1) Verbinden mit inter, dann (2) interAusführen des Befehls nc final.com 22.
nc - arbitrary TCP and UDP connections and listens
nc final.com 22Stellt also eine Verbindung zu final.com-Port 22 her, druckt den gesamten eingehenden Datenverkehr auf stdout aus und sendet den gesamten stdin auf die andere Seite. Es ist ein "Tunnel" zwischen nc stdin / out und final.com Port 22.
Da nces innerhalb der SSH-Sitzung ausgeführt wird, wird die gesamte Standardausgabe als "unformatierter" Datenverkehr an den SSH-Client zurückgegeben. Und der ssh-Client kann Datenverkehr an nc stdin weiterleiten, der dann an final.com-Port 22 endet.
Durch den obigen "Tunnel" startet der lokale ssh-Client eine ssh-Sitzung final.comdirekt mit.
Der folgende Befehl
ssh -t inter ssh user2@final.com
funktioniert nicht mit, ProxyCommandweil der aus ihm heraus nicht "roher" Verkehr von einem ssh-Dämon ist. Es ist die Standardausgabe eines SSH-Clients . Kundengespräch mit Kunden bedeutet kein Geschäft.
Authentifizierung mit verschiedenen SSH-Schlüsseln (OP Original Konfiguration)
Host inter
User user1
HostName inter.com
IdentityFile ~/.ssh/id_rsa
Host final
User user2
HostName final.com
IdentityFile ~/.ssh/id_rsa_2
ProxyCommand ssh inter nc %h %p
Lokal kopieren ~/.ssh/id_ras.pubnach
/home/user1/.ssh/authorized_keys in `inter`
Lokal kopieren ~/.ssh/id_ras_2.pubnach
/home/user2/.ssh/authorized_keys in `final`
Beides ermöglicht die folgende Verwendung
local# ssh final
Zusätzliche Prüfung
Verwenden Sie ausführlich
local# ssh -v final
Das sollte helfen, das SSH-Problem zu identifizieren.
Überprüfen Sie nc
ProxcyCommandwird ausgeführt ncam inter. Prüfen Sie, ob ncam tatsächlich verfügbar ist inter.
local# ssh inter
inter# nc final.com 22
Überprüfen Sie, ob der RSA-Schlüssel richtig eingerichtet ist
Wenn für interund andere Schlüssel verwendet werden sollen final, sollten folgende Dateien auf dem lokalen Computer vorhanden sein
local# ls ~/.ssh
id_rsa id_rsa_2 id_rsa.pub id_rsa_2.pub
Da Sie interbereits zu ssh können , überprüfen Sie das Schlüssel-Setup auf final. Von Ihrem lokalen Computer
local# ssh -t inter ssh user2@final
final# cat .ssh/authorized_keys
Sie sollten den Inhalt von id_rsa_2.pubdort sehen.
ssh -t, aber ich möchte genau das Verhalten simulieren, das ich habe, wenn ichssh -tnur die Konfiguration auf der Website verwende.ssh/config.