ssh multi-hop… Befehl an ssh-Konfigurationsdatei anpassen

10

Ich versuche, meinen Multi-Hop-Befehl ssh in die Datei ssh .ssh / config einzufügen.

Dies ist mein Verbindungsdiagramm: Laptop (ich bin hier) ------> Benutzer -------> Workstation

Ich habe die öffentlichen ssh-Schlüssel von ssh in 'userver' und 'workstation' abgelegt. In diesem Moment kann ich eine Verbindung herstellen, indem ich diese Zeile eingebe:

ssh -A -t userserver@userver ssh -A userworkstation@workstation

Ich möchte jedoch in der Lage sein, die Funktionen der Konfigurationsdatei in ~ / .ssh / config zu verwenden, um den gleichen Effekt zu erzielen, jedoch mit einem einfachen Befehl, mit dem ich auch schnell mit 'scp' kopieren kann. Das einzige Problem ist, dass 'userver' nicht den Befehl "nc" hat und ich dort keinen Superuser habe, sondern nur die Kontrolle über meinen Home-Ordner. Trotzdem habe ich einige Dinge ausprobiert:

Ich habe diese Konfigurationsdatei in meinem Laptop (~ / .ssh / config):

# laptop config file
Host userver
Hostname userver_hostname
port 22
User server_user

Auch eine andere Konfigurationsdatei im Userver (~ / .ssh / config)

# userver config file
Host workstation
Hostname workstation_hostname
port 22
user workstation_username

Mit diesen Konfigurationsdateien kann ich mich verbinden als

ssh -A -t userver ssh -A workstation

Das ist eine Verbesserung, aber nicht ausreichend. Ich habe versucht, einen anderen Host in meiner Laptops-Konfiguration hinzuzufügen:

Host hop
ProxyCommand ssh -A -t userver ssh -A workstation

Dann, wenn ich es tue

ssh hop

Ich erhalte die folgende Ausgabe mit Fehlern und kann keine Verbindung herstellen:

Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
-bash: line 1: $'SSH-2.0-OpenSSH_6.4\r': command not found

Irgendwelche Ideen?

labotsirc
quelle

Antworten:

6

Der Befehl, den Sie benötigen, ist ProxyCommand.

Sie sollten folgende Zeilen in Ihre .ssh / config-Datei einfügen:

  Host userver
  HostName userver.example.com
  .........    

  Host workstation 
  ProxyCommand ssh -q userver nc -q0 workstation 22

Jetzt können Sie über eine Verbindung zur PC-Workstation herstellen

  ssh worksation

Wenn dies nicht klar ist oder Sie weitere Details wünschen, empfehlen wir Ihnen, diese hervorragende Einführung in ssh Multi-Hopping zu lesen .

Bearbeiten:

Sie können jederzeit einen Alias ​​definieren: Fügen Sie in Ihrer Datei /home/your_name/.bashrc die folgende Zeile hinzu:

  alias ssh_workstation='ssh -A -t userver ssh -A -X workstation' 

(Ich habe die -XOption eingefügt, damit Sie grafische Anwendungen auf dem Remote-Server ausführen und lokal anzeigen können. Wenn Sie dies nicht möchten, lassen Sie die Option einfach fallen. -X)

MariusMatutiae
quelle
Hallo MariusMatutiae, ich habe deine Lösung ausprobiert, aber wie ich im ursprünglichen Beitrag sagte, fehlt dem 'userver'-Knoten das Programm netcat (nc). Also bekomme ich diesen Fehler: ssh Workstation bash: nc: Befehl nicht gefunden ssh_exchange_identification: Verbindung vom Remote-Host geschlossen
labotsirc
Kannst du es nicht installieren?
Marius Matutiae
Leider nein, ich habe keinen Superuser für 'userver', deshalb habe ich eine alternative Methode ausprobiert. Ich verstehe es nicht, wenn dies funktioniert "ssh -A -t userver ssh -A Workstation", warum funktioniert das gleiche auf ProxyCommand nicht?
Labotsirc
1
@ Labotsirc Ich habe meine Antwort leicht geändert. Ich hoffe, Sie finden es nützlich. Alternativ können Sie versuchen, netcat lokal zu installieren (dh nur für Sie!), Und in der Zeile Proxycommand .... den vollständigen Pfad zu Ihrer eigenen Kopie von netcat hinzufügen. Ich bin mir nicht sicher, ob dies aufgrund von Berechtigungen funktioniert, aber Sie können es versuchen.
Marius Matutiae
Kopierte meine Netcat-Binärdatei, entfernte die Option -q0, weil sie Fehler verursachte, und jetzt funktioniert sie! Danke
labotsirc
10

Ich fand, dass die folgende Lösung viel besser funktioniert als die Verwendung von netcat ( nc) wie im anderen Beispiel. Mit netcat war meine Verbindung sehr langsam und blieb wiederholt hängen, bis ich einige Tasten drückte. Außerdem muss netcat nicht installiert sein.

Fügen Sie Folgendes hinzu ~/.ssh/config:

Host *
  ServerAliveCountMax 4
  ServerAliveInterval 15

Host workstation
  Hostname workstation
  User userworkstation
  ProxyCommand ssh userserver@userver -W %h:%p

Dann können Sie so ssh:

ssh workstation

Beachten Sie auch, dass der Grund dafür, dass Sie ProxyCommandnicht funktionieren, darin besteht, dass Sie nicht das bekommen, was ProxyCommandfunktioniert. ProxyCommandmuss eine Pipe erstellen, über die ssheine SSL-Verbindung hergestellt werden kann. Mit anderen Worten, der Befehl muss einen Prozess starten, bei dem stdin und stdout eine Verbindung sshzu einem sshdPort herstellen. In Ihrer Konfiguration stellen Sie eine SSH-Verbindung her, mit ProxyCommandder eine Verbindung sshzur Befehlsshell und nicht zu einem sshdPort hergestellt wird.

jcoffland
quelle