SSH:ssh 服务器上没有 shell 的隧道

Bau*_*iao 95 ssh ssh-tunneling

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

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

ssh -L MY_LOCAL_PORT:FOREIGN_ADDRESS:FOREIGN_PORT MYUSER@SSH_SERVER
Run Code Online (Sandbox Code Playgroud)

之后,我登录到我的 SSH_SERVER。

我怎样才能避免这个功能?!我只需要建立一个隧道。我不必登录到我的 SSH_SERVER...

我试过 -N 选项,但它让我的 shell 很忙。

Adr*_* M. 105

如其他帖子所述,如果您不想在远程主机上出现提示,则必须使用-NSSH 选项。但这只是在没有提示的情况下保持 SSH 运行,并且 shell 很忙。

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

ssh -N -L 8080:ww.xx.yy.zz:80 user@server &
Run Code Online (Sandbox Code Playgroud)

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

ssh -N -L 8080:ww.xx.yy.zz:80 user@server >/dev/null 2>&1 & 
Run Code Online (Sandbox Code Playgroud)

玩得开心 SSH。

  • 您还可以使用 ssh 选项 `-f` 代替 `&` 和 io 重定向。 (19认同)

neu*_*242 79

-f -N 是你要找的:

ssh -f -N -L MY_LOCAL_PORT:FOREIGN_ADDRESS:FOREIGN_PORT MYUSER@SSH_SERVER
Run Code Online (Sandbox Code Playgroud)

从ssh手册页:

-f在命令执行之前请求 ssh 进入后台。如果 ssh 将要求输入密码或密码短语,但用户希望在后台使用,这将很有用。这意味着-n。

-N不执行远程命令。这对于仅转发端口很有用(仅限协议版本 2)。

-n重定向标准输入/dev/null(实际上,阻止从标准输入读取)。这必须ssh在后台运行时使用。

  • @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 中自动创建该文件。 (17认同)
  • 它应该是`ssh -S /tmp/file-sock -O exit`,而不是`-o` https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Multiplexing#Setting_Up_Multiplexing (12认同)
  • 一旦隧道建立起来,你如何用这种方法关闭它? (4认同)
  • 我的意思是“控制插座”而不是“主插座” (2认同)