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
final
Abschnitt in ~/.ssh/config
wird nicht verwendet.
Verbindungsdetails (1)
ssh -t inter ssh user2@final.com
kann wie folgt angezeigt werden
local# ssh inter
inter# ssh user2@final.com
local
ist nur "reden" mit inter
. Es gibt keine direkte oder indirekte SSH-Verbindung zwischen local
und final
. local
zeigt 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.pub
nach
/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 ProxyCommand
geht 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) inter
Ausführen des Befehls nc final.com 22
.
nc - arbitrary TCP and UDP connections and listens
nc final.com 22
Stellt 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 nc
es 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.com
direkt mit.
Der folgende Befehl
ssh -t inter ssh user2@final.com
funktioniert nicht mit, ProxyCommand
weil 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.pub
nach
/home/user1/.ssh/authorized_keys in `inter`
Lokal kopieren ~/.ssh/id_ras_2.pub
nach
/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
ProxcyCommand
wird ausgeführt nc
am inter
. Prüfen Sie, ob nc
am 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 inter
und 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 inter
bereits 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.pub
dort sehen.
ssh -t
, aber ich möchte genau das Verhalten simulieren, das ich habe, wenn ichssh -t
nur die Konfiguration auf der Website verwende.ssh/config
.