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


13

我想在我的配置文件中设置一个别名,该别名与此命令相同:

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

我在上面的配置中放入什么来不启动外壳?


+1是一个好问题,这让我开始思考如何更快地隧穿随机对象(我经常记不记得交换机的信息,但是我通常使用相同的端口,只是改变主机)。
WEBjuju

Answers:


22

因此,ssh.c在OpenSSH 7.6p1中,我们发现

            case 'N':
                    no_shell_flag = 1;
                    options.request_tty = REQUEST_TTY_NO;

-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

从技术上讲,它确实启动了外壳程序,但是该外壳程序应立即用cat程序替换自身,然后程序应阻塞以允许同时使用端口转发。cat是便携式的,但是会消耗输入(如果有)或失败(如果关闭标准输入)。另一种选择是运行仅阻塞的内容


1
+1可以在.ssh/config... 内完成!
WEBjuju

对这个答案的研究真棒!谢谢!
黄色

我更喜欢RemoteCommand exec sleep infinity
托马斯,

3

根据您的意愿,@ thrig会提供正确的答案,仅在内部 .ssh/config

可能还会考虑使用具有默认值的功能来快速执行其他隧道命令(尤其是如果隧道仅更改主机而不更改)。


sshn() {
  # set your desired host and port forwarding as default
  # and allow them to be passed in if you should need it

  host="${1:-devdb}"
  port="${2:-1234:127.0.0.1:1234}"

  # now all you have to do is `sshn` and it will connect

  echo "executing ssh -N $host -L $port"
  ssh -N "$host" -L "$port"
}

以下是三个正在使用的示例:不带参数的情况下,使用函数中指定的默认值:

$ sshn
executing -N devdb -L 1234:127.0.0.1:1234

使用默认的隧道,在其他主机上运行:

$ sshn host2
executing ssh -N host2 -L 1234:127.0.0.1:1234

使用两个默认值,一次完整地运行到新的主机/隧道:

$ sshn host3 12345:127.0.0.1:12345
executing ssh -N host3 -L 12345:127.0.0.1:12345

0

基于@thrig的答案的更有用的远程命令:

Host someHost
Hostname 1.2.3.4
LocalForward 15673 localhost:15672
RequestTTY no
RemoteCommand bash -c 'echo "Listening on port 15673"; read -r -d '' _'

read -r -d '' _将阻塞,直到用户按连接control+c

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.