“不执行远程命令”是什么意思?

zmu*_*unk 10 ssh

在 ssh 的手册页中,它说:

-N    Do not execute a remote command.  This is useful for just forwarding ports.
Run Code Online (Sandbox Code Playgroud)

我不明白“不执行远程命令”是什么意思。

有人可以向我解释一下吗?

ber*_*sch 25

通常,ssh程序在远程系统上运行命令(使用远程用户的 shell)。例如,ssh user@server ls -l /tmp列出 /tmp 目录的内容server。当您不使用该命令时,如在 中ssh user@server,将启动与用户 shell 的交互式登录会话。

OpenSSH 的功能之一是创建隧道。的-D-L-R选择使用,允许网络端口,也被称为隧道转发的各种技术。默认情况下,ssh只要执行的命令ssh在远程服务器上运行,创建的隧道就存在。

但是,您通常对运行远程命令不感兴趣。你想要的只是隧道。这就是该-N选项的用途。

  • @j4nd3r53n:还有其他方法不一定需要远程命令,您可以尝试使用而不是“ping”:请参阅常见的 openssh 选项:TCPKeepAlive(每隔几秒钟发送一个 tcp 数据包以保持连接活) (4认同)
  • 至少在一种情况下,您想要运行远程命令,即使您只想使用隧道:通常,在云环境中,您对系统的唯一访问是首先登录到堡垒服务器,然后常见的安全功能是让服务器丢弃一个看似被动的会话,这意味着您的隧道消失了。在那种情况下,我通常会运行类似“ping localhost”这样的远程命令;这会产生足够的活动以使会话保持打开状态。 (2认同)
  • @j4nd3r53n 看起来像是堡垒服务器中的一个错误 (2认同)
  • @j4nd3r53n :还有 -N 吗?(好像您不使用 -N :它会打开一个远程外壳,例如可能有一个 TMOUT 变量集(并且通常设为只读)[或其他变量名称,取决于外壳]?) (2认同)

pLu*_*umo 12

通常,ssh会通过执行设置为您的远程用户登录 shell(例如/bin/bash)来为您提供远程 shell 。-N将阻止运行任何东西,这在您只想ssh用于建立连接并且不需要远程 shell时很有用。

例如转发端口或创建隧道:

ssh -N -L 8080:127.0.0.1:80 user@server
Run Code Online (Sandbox Code Playgroud)

这不仅对转发端口有用。

例如:我将它与-fControlMasterControlPath选项结合使用(例如在 .ssh/config 中设置),它可用于创建可重用的连接。

ssh -fN user@server # creates connection in the background that can be reused.
Run Code Online (Sandbox Code Playgroud)