ssh -N 的 .ssh/config 对应选项是什么

mik*_*keb 17 ssh ssh-config

我想在我的配置文件中设置一个与此命令具有相同结果的别名:

ssh -N devdb -L 1234:127.0.0.1:1234
Run Code Online (Sandbox Code Playgroud)

我的 .ssh/config 条目devdb

Host devdb
User someuser
HostName the_hostname
LocalForward 1234 127.0.0.1:1234
Run Code Online (Sandbox Code Playgroud)

我在上面的配置中放了什么才能不启动 shell?

thr*_*rig 31

所以在ssh.cOpenSSH 7.6p1 中我们发现

            case 'N':
                    no_shell_flag = 1;
                    options.request_tty = REQUEST_TTY_NO;
Run Code Online (Sandbox Code Playgroud)

-N两件事也是如此:

  • no_shell_flag只出现在ssh.c且仅用于启用-W-N选项,否则它会显示在相关的一些逻辑块ControlPersist,涉及背景叉完整性检查。我没有看到选项可以直接设置它的方式。
  • 根据readconf.c所述request_tty对应于RequestTTY所详述的选择ssh_config(5)

这留下了(除了猴子修补 OpenSSH 和重新编译,或要求ssh_config切换的选项no_shell_flag......)类似于:

Host devdb
 User someuser
 HostName the_hostname
 LocalForward 1234 127.0.0.1:1234
 RequestTTY no
 RemoteCommand cat
Run Code Online (Sandbox Code Playgroud)

从技术上讲,它确实启动了一个 shell,但该 shell 应该立即用cat程序替换自己,然后该程序应该阻止允许同时使用端口转发。cat是可移植的,但会消耗输入(如果有)或可能失败(如果标准输入关闭)。另一种选择是运行一些只阻止.