SSH-Relay-Server mit OpenSSH

10

Ist es möglich, OpenSSH zu verwenden, um an andere SSH-fähige Geräte wie Router-Switches usw. weiterzuleiten? Wenn dies möglich ist, ohne eine maßgeschneiderte Anwendung unter Linux zu erstellen, um dies zu tun?

Vielen Dank

ein Jäger
quelle

Antworten:

9

Sicher; Verwenden Sie einfach SSH-Port-Weiterleitung / Tunneling. Starten Sie eine SSH-Verbindung zum "Proxy" -Computer mit dem folgenden Befehl:

ssh -L$LOCALPORT:$REMOTEHOST:$SSHPORT $PROXYHOST
  • $PROXYHOST: Der Computer, auf den Sie SSH-Zugriff haben
  • $REMOTEHOST: die Maschine, mit der $ PROXYHOST eine Verbindung herstellen kann, die Sie jedoch nicht können. Verwenden Sie einen Hostnamen oder eine IP-Adresse, $PROXYHOSTmit der auf den Computer verwiesen werden kann
  • $SSHPORT: der Port, auf den sshd auf remotehost wartet; höchstwahrscheinlich 22
  • $LOCALPORT: Der lokale ausgehende Port SSH wird auf Ihrem lokalen Computer geöffnet, der an Port 22 weiterleitet $REMOTEHOST

Lassen Sie diese Verbindung offen, damit der Tunnel funktioniert. Möglicherweise möchten Sie -Ndem Befehl auch etwas hinzufügen , damit diese Verbindung keine Remote-Shell aufruft und Sie sie später nicht versehentlich schließen.

Gehen Sie nach dem Aufbau des Tunnels wie folgt vor:

ssh -p $LOCALPORT localhost

Dadurch wird versucht, eine SSH-Verbindung zu Ihrem lokalen Computer an dem Port herzustellen, der an den $REMOTEHOSTSSH-Port des Computers weitergeleitet wird .

Brad Beyenhof
quelle
3

Wenn Sie bereit sind, die Konfiguration auf Ihrem Client zu aktualisieren, können Sie Ihren Client so einrichten, dass Ihre Gateway-Box als Proxy verwendet wird . Auf Ihrer Relay-Box muss netcat installiert sein. Um die besten Ergebnisse zu erzielen, sollten Sie eine schlüsselbasierte Authentifizierung einrichten.

Folgendes verwende ich in meiner .ssh / config, um eine Verbindung über einen anderen Host herzustellen.

Host internal-ssh-host-proxy
    ProxyCommand /usr/bin/ssh username@ssh-relay-host "/bin/netcat -w 1 internal-ssh-host 22"

Mit dem oben genannten können Sie einfach den Befehl ssh internal-ssh-host-proxy von Ihrem Client-Computer ausführen .

Wenn der Proxy-SSH-Host über den OpenSSH-Client 5.4 oder höher verfügt, benötigen Sie kein Netcat. Stattdessen können Sie den integrierten Netcat-Modus verwenden.

Host internal-ssh-host-proxy
    ProxyCommand /usr/bin/ssh username@ssh-relay-host -W internal-ssh-host:22
Zoredache
quelle
Entschuldigung, aber dies verwendet nicht OpenSSH. Sie verwenden Netcat, um das Relay zwischen Client-Server und Server durchzuführen.
aHunter
Es verwendet OpenSSH in Kombination mit einem sehr verbreiteten Dienstprogramm, das fast überall verfügbar ist. Es ist kein reines SSH, aber ich würde es nicht als ausgesprochen bezeichnen.
Zoredache
Nein, ich bin damit einverstanden, dass es nicht maßgeschneidert ist, aber ich wollte wissen, ob es möglich ist, mit OpenSSH weiterzuleiten, sodass Sie einen Standard-SSH-Client und SSH an eine Box mit OpenSSH verwenden, die dann automatisch SSH-Zugriff auf einen anderen Computer oder mehrere Computer bietet. Danke
aHunter
+1 funktioniert für mich
xkcd150
1
@aHunter, für die Aufzeichnung gibt es jetzt einen 'netcat-Modus', der in openssh 5.4 integriert ist und eine reine openssh-Verbindung bietet - blog.rootshell.be/2010/03/08/openssh-new-feature-netcat-mode keine externen Tools wird gebraucht.
Zoredache
3

Von den vorgestellten Antworten ist Zordache die beste Gesamtlösung. Wenn Sie jedoch für die Nachwelt einfach eine Ad-hoc-Verbindung herstellen möchten, ohne Ihre Konfiguration zu bearbeiten, verwenden Sie das -tFlag, um ein Pseudo-Terminal zuzuweisen und ssh direkt auf dem Relay auszuführen.

ssh -t relay.example.com ssh internal.example.com
Bahamat
quelle
einfachste Lösung ohne Dateien bearbeiten
Kartoch
2

Sie können Verbindungen mit OpenSSH automatisch weiterleiten. In Ihrer ~/.ssh/authorized_keysDatei können Sie einen auszuführenden Befehl angeben, der eine SSH für einen zweiten Computer sein kann.

[ssh client] ----> [ssh relay server] ----> [ssh target server]
    you          modified authorized_keys      target machine

Am Ende werden zwei Eingabeaufforderungen angezeigt Password:: eine für den Relay-Server und eine für den Zielserver. Sie können dieses Verhalten jederzeit mithilfe von Zertifikaten entfernen.

Sybreon
quelle
das klingt perfekt wie würdest du das sshd in openssh konfigurieren?
aHunter
Siehe den Abschnitt über [Erzwungene Befehle] [1] unter [1] eng.cam.ac.uk/help/jpmg/ssh/authorized_keys_howto.html
Sybreon
Das ist eine erstaunliche Idee. Als letztes möchte ich 100 diskrete Ports in meiner Firewall mit Routen öffnen. Wiederholen Sie diesen Vorgang aus Redundanzgründen. Dies legt nahe, dass ich 100 SSH-Schlüssel erstellen und jeden mit seinem eigenen Server verknüpfen kann. Dies deutet auch darauf hin, dass ich den Relay-Server vollständig sperren kann. Einige nennen dies vielleicht ein VPN, aber ich sehe es anders.
Richard