SSH:SSH服务器上没有外壳的隧道


63

我必须在两台主机之间建立一条隧道。

为此,我ssh以这种方式使用:

ssh -L MY_LOCAL_PORT:FOREIGN_ADDRESS:FOREIGN_PORT MYUSER@SSH_SERVER

之后,我登录到SSH_SERVER。

如何避免使用此功能?我只需要建立一条隧道。我不必登录到SSH_SERVER ...

我尝试了-N选项,但它使我的shell忙。


SSH -N -L xx:xx:xx user @ server&<-您以前尝试过吗?
劳伦斯

嘿,你说得对。我已经尝试在另一台主机上使用-N选项。因此,我发现问题出在我的ssh客户端上(我不知道为什么,我将搜索原因)。非常感谢!
鲍苗

1
man ssh显示了如何:ssh -f -L 1234:localhost:6667 server.example.com sleep 10 && irc -c '#users' -p 1234 pinky 127.0.0.1 -f选项ssh后台并且指定了远程命令``sleep 10''以允许一定的时间(在本示例中为10秒)启动要通过隧道传输的服务。如果在指定的时间内未建立任何连接,ssh将退出。```
lionello

Answers:


71

如其他文章中所述,如果您不想在远程主机上出现提示,则必须使用-NSSH选项。但是,这只是使SSH保持运行而没有提示,并且Shell处于繁忙状态。

您只需要将SSH'ing作为后台任务并带有&符号:

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

这将在后台启动ssh隧道。但是可能会出现一些消息,尤其是当您尝试连接到非监听端口时(如果未启动服务器apache)。为了避免这些消息在执行其他操作时在您的外壳中产生,您可以将STDOUT / STDERR重定向到big void:

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

尝试使用SSH。


17
您也可以使用ssh选项-f代替&io重定向。
tkrennwa 2013年

49

-f -N 您正在寻找的是:

ssh -f -N -L MY_LOCAL_PORT:FOREIGN_ADDRESS:FOREIGN_PORT MYUSER@SSH_SERVER

3
隧道建立后,如何使用此方法将其关闭?
magnetik 2015年

@magnetik查找与过程pskill
neu242

13
@magnetik和@ neu242更好的方法是使用“主套接字”,ssh -N -f -M -S /tmp/file-sock -L port:server:port_to user@...这样您以后可以使用ssh -S /tmp/file -o exit user@....(或杀死)杀死连接。这样,就不需要ps了。您可以告诉在〜/ .ssh / config中自动创建该文件。
Metal3d

1
我的意思是“控制套接字”而不是“主套接字”
Metal3d

8
它应该是ssh -S /tmp/file-sock -O exit,不-o en.wikibooks.org/wiki/OpenSSH/Cookbook/...
fetsh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.