SSH über 3rd Machine

7
Local Computer (Fedora)  --SSH-->  Server1  --SSH-->  Server2

In einigen Umgebungen, in denen ich arbeite, müssen wir "Sprungboxen" verwenden, in denen Sie zu einem Server ssh, um zu einem anderen Server zu gelangen. Gibt es eine schnelle Möglichkeit, dies zu tun, indem Sie möglicherweise ~ / .ssh / config bearbeiten, sodass jedes Mal, wenn ich von meinem lokalen Computer zu Server2 ssh, automatisch die erforderliche Verbindung zu Server1 hergestellt wird? Ich kann Schlüssel so einrichten, dass ich bei Bedarf nicht zur Eingabe eines Kennworts für Server1 aufgefordert werde.

SeanFromIT
quelle
Dies + scp. Es wäre perfekt.
Kubanczyk

Antworten:

6

Diese Art von Funktionalität wurde in OpenSSH Version 5.4 hinzugefügt und kann auf diese Weise verwendet werden

ssh -W server2 server1

Wo server2ist Ihr beabsichtigtes Ziel und server1ist Ihr Proxy-Host. Sie können dies vereinfachen, indem Sie die folgende ProxyCommandOption in Ihrer SSH-Konfiguration verwenden:

host = *.example.com
user = packs
port = 22
ProxyCommand ssh -W %h:%p server1

Ich habe es auch mit Netcat gesehen, also mit den gleichen Beispielen wie oben

ssh server1 nc -q0 server2 22

In ähnlicher Weise kann dies auch in Ihrem ssh Konfiguration angewendet werden, außer Ersetzen der ProxyCommandals

ProxyCommand ssh server1 nc -q0 %h %p
Scott Pack
quelle
Dies scheint das Richtige zu tun, aber ich erhalte Kanal 0: Öffnen fehlgeschlagen: Administrativ verboten: Öffnen fehlgeschlagen ssh_exchange_identification: Verbindung vom Remote-Host geschlossen Ich habe versucht, PermitTunnel yes in sshd_config auf Server1 festzulegen und sshd neu zu starten, erhalte jedoch den gleichen Fehler. Muss ich das auf Server2 machen?
SeanFromIT
Keine Ursache. Server1 löste Server2 nicht auf. Musste Server2 zu / etc / hosts auf Server1 hinzufügen und der Fehler ging weg.
SeanFromIT
Allerdings ist die -WOption in vielen vorhandenen SSH-Implementierungen nicht verfügbar.
ewwhite
@ewwhite: Genau, genau deshalb habe ich die Antwort aktualisiert, um zu reflektieren, in welchen Versionen sie verfügbar ist.
Scott Pack
7

Sie können einen Befehl wie den folgenden verwenden:

$ ssh -t user@server1 ssh user@server2

Dieser Befehl führt Sie über Server1 zum Server2. Sie werden aufgefordert, zwei Kennwörter nacheinander einzugeben, um sich bei Server1 und dann bei Server2 anzumelden. Wenn Sie die erforderlichen SSH-Schlüssel einrichten, sollten Sie automatisch bei server2 angemeldet sein.

Dies ist sehr nützlich, wenn Sie sich nicht direkt bei server2 anmelden können.

Khaled
quelle
Netter Vorschlag.
ewwhite
Ich habe diesen Befehl kürzlich gefunden!
Khaled
Beachten Sie, dass eine solche SSH-Nutzung weniger sicher ist als die Portweiterleitung (mit ssh -Woder mit anderen herkömmlichen Methoden), da zwischen dem lokalen Computer und dem Server kein durchgehender verschlüsselter Kanal besteht2. Wenn Server1 gefährdet ist, kann der Angreifer die unverschlüsselte Kommunikation zwischen sshd- und ssh-Prozessen auf Server1 abfangen und Zugriff auf Server2 erhalten.
Sergey Vlasov
2

Ich benutze weitergeleitete Ports:

# ~/.ssh/config

# The jumping-off point

Host server1
  Hostname blah.sample.com
  LocalForward 10002 server2:22
  LocalForward 10003 server3:22

# Servers behind the jumping-off point, reached by connecting
# to the forwarded ports above

Host server2
  HostKeyAlias server2
  Hostname localhost
  Port 10002

Host server3
  HostKeyAlias server3
  Hostname localhost
  Port 10003

Dies hat mehrere Vorteile gegenüber ssh -t user@server1 ssh user@server2:

  • Über denselben Tunnel können mehrere Sitzungen eingerichtet werden.
  • Sie müssen jede Verbindung nur einmal statt zweimal authentifizieren.
  • Transparente Verwendung ssh, scpund sftp( zum Beispiel möglich , scp thisfile server2:~/thatfileohne zusätzliche Gymnastik zu tun haben).
  • X- und Portweiterleitung funktionieren, ohne darüber nachdenken zu müssen.
Blrfl
quelle