SSH: Tunnel ohne Shell auf SSH-Server

63

Ich muss einen Tunnel zwischen zwei Hosts einrichten.

Dafür verwende ich sshauf diese Weise:

ssh -L MY_LOCAL_PORT:FOREIGN_ADDRESS:FOREIGN_PORT MYUSER@SSH_SERVER

Danach logge ich mich in mein SSH_SERVER ein.

Wie kann ich diese Funktion vermeiden ?! Ich muss nur einen Tunnel bauen. Ich muss mich nicht bei meinem SSH_SERVER anmelden ...

Ich habe die Option -N ausprobiert, aber dadurch war meine Shell beschäftigt.

Bau Miao
quelle
SSH -N -L xx: xx: xx Benutzer @ Server & <- haben Sie das schon einmal versucht?
Lawrence
Hey, du hast recht. Ich habe es auf einem anderen Host versucht und die Option -N funktioniert. Ich habe festgestellt, dass das Problem bei meinem ssh-Client liegt (ich weiß nicht warum und werde den Grund dafür suchen). Danke vielmals!
Bau Miao
1
man sshzeigt, wie: ssh -f -L 1234:localhost:6667 server.example.com sleep 10 && irc -c '#users' -p 1234 pinky 127.0.0.1 Die Option -f hintergründe ssh und der Fernbefehl `` sleep 10 '' werden angegeben, um eine bestimmte Zeitspanne (im Beispiel 10 Sekunden) zum Starten des zu tunnelnden Dienstes zu ermöglichen. Wenn innerhalb der angegebenen Zeit keine Verbindung hergestellt wird, wird ssh beendet. `` `
lionello

Antworten:

71

Wie bereits in anderen Beiträgen erwähnt, müssen Sie die -NOption SSH verwenden , wenn Sie keine Eingabeaufforderung für den Remote-Host wünschen . Dadurch wird jedoch SSH ohne Eingabeaufforderung weiter ausgeführt, und die Shell ist beschäftigt.

Sie müssen nur das SSH'ing als Hintergrundaufgabe mit dem &Zeichen setzen:

ssh -N -L 8080:ww.xx.yy.zz:80 user@server &

Dadurch wird das SSH-Tunneling im Hintergrund gestartet. Es können jedoch einige Meldungen angezeigt werden, insbesondere wenn Sie versuchen, eine Verbindung zu einem nicht empfangsbereiten Port herzustellen (wenn der Apache-Server nicht gestartet ist). Um zu vermeiden, dass diese Nachrichten in Ihrer Shell erscheinen, während Sie andere Dinge tun, können Sie STDOUT / STDERR in die große Leere umleiten:

ssh -N -L 8080:ww.xx.yy.zz:80 user@server >/dev/null 2>&1 & 

Viel Spaß mit SSH.

Adrien M.
quelle
17
Sie können auch die Option ssh -fanstelle von &und io Redirection verwenden.
Tkrennwa
49

-f -N ist was Sie suchen:

ssh -f -N -L MY_LOCAL_PORT:FOREIGN_ADDRESS:FOREIGN_PORT MYUSER@SSH_SERVER
neu242
quelle
3
Wie schließen Sie den Tunnel nach dem Einrichten mit dieser Methode?
Magnetik
@magnetik Finde den Prozess mit psund killes
neu242
13
@magnetik und @ neu242, desto besser ist es, "master socket" zu verwenden, ssh -N -f -M -S /tmp/file-sock -L port:server:port_to user@...damit Sie die Verbindung später mit ssh -S /tmp/file -o exit user@....(oder kill) beenden können . Auf diese Weise keine Notwendigkeit, ps. Sie können festlegen, dass diese Datei automatisch in ~ / .ssh / config erstellt wird.
Metal3d
1
Ich meine "Control Socket" und nicht "Master Socket"
Metal3d
8
Es sollte sein ssh -S /tmp/file-sock -O exit, nicht -o en.wikibooks.org/wiki/OpenSSH/Cookbook/...
fetsh