我想在我的配置文件中设置一个别名,其结果与此命令相同:
ssh -N devdb -L 1234:127.0.0.1:1234
我的 .ssh/config 条目devdb
:
Host devdb
User someuser
HostName the_hostname
LocalForward 1234 127.0.0.1:1234
我在上面的配置中放了什么来不启动 shell?
我想在我的配置文件中设置一个别名,其结果与此命令相同:
ssh -N devdb -L 1234:127.0.0.1:1234
我的 .ssh/config 条目devdb
:
Host devdb
User someuser
HostName the_hostname
LocalForward 1234 127.0.0.1:1234
我在上面的配置中放了什么来不启动 shell?
所以
ssh.c
对于 OpenSSH 7.6p1 我们发现-N
两件事也是如此:no_shell_flag
only 出现在or选项中ssh.c
并且只启用,否则它出现在一些与后台分叉相关的逻辑块中。我看不到选项可以直接设置它的方式。-W
-N
ControlPersist
readconf.c
的选项。request_tty
RequestTTY
ssh_config(5)
这会留下(除了猴子修补 OpenSSH 和重新编译,或要求
ssh_config
选择切换no_shell_flag
...)类似:从技术上讲,它确实启动了一个外壳,但该外壳应立即用程序替换自己,
cat
然后该程序应阻止允许同时使用端口转发。cat
是可移植的,但会消耗输入(如果有)或可能失败(如果标准输入关闭)。另一种选择是运行只是阻塞的东西。@thrig 有正确的答案,基于您仅在内部执行此操作的愿望
.ssh/config
还可以考虑使用具有默认值的函数来快速执行其他隧道命令(特别是如果隧道不更改而只更改主机)。
以下是它的三个使用示例:没有参数,使用函数中指定的默认值:
使用隧道默认值,在不同的主机上运行:
使用这两种默认值,对新主机/隧道运行完整的一次性:
基于@thrig 的答案的更有用的远程命令:
将
read -r -d '' _
阻止连接,直到用户按下control+c
。