在 ssh 的手册页中,它说:
-N Do not execute a remote command. This is useful for just forwarding ports.
我不明白“不执行远程命令”是什么意思。
有人可以向我解释一下吗?
答案1
通常,ssh
程序在远程系统上运行命令(使用远程用户的 shell)。例如,ssh user@server ls -l /tmp
列出 上的 /tmp 目录的内容server
。当您省略该命令时(如 中所示)ssh user@server
,将启动与用户 shell 的交互式登录会话。
OpenSSH 的功能之一是创建隧道。 、-D
和选项使用允许转发网络端口的各种技术-L
,-R
也称为隧道。默认情况下,ssh
只要ssh
在远程服务器上执行命令,用 建立的隧道就存在。
但通常情况下,您对运行远程命令不感兴趣;你想要的只是隧道。这就是该-N
选项的用途。
答案2
通常,ssh
将通过执行设置为远程用户登录 shell 的内容(例如/bin/bash
)来为您提供远程 shell。-N
将阻止运行任何内容,当您只想用于ssh
建立连接并且不需要远程 shell 时,这非常有用。
例如转发端口或创建隧道:
ssh -N -L 8080:127.0.0.1:80 user@server
这不仅对转发端口有用。
例如:我将它与 和-f
选项结合使用(例如在 .ssh/config 中设置),它可以用于创建可重用的连接。ControlMaster
ControlPath
ssh -fN user@server # creates connection in the background that can be reused.