.ssh/config 具有可变端口的 ProxyCommand

.ssh/config 具有可变端口的 ProxyCommand

在我工作的环境中,我们使用隧道通过 SSH 连接到各种服务器。例如,我将使用“ssh -p XXXXX username@localhost”来访问服务器。

如果端口始终相同,我可以这样做,然后就完成了:

Host somehost
  User bryan
  Hostname localhost
  Port 12345
  ProxyCommand ssh -p 2218 [email protected] -W %h:%p

但是,如果隧道关闭并恢复,所使用的端口可能并且将会发生变化。这不是我有能力改变的——它内置于基础设施中。所以,我写了一个程序来查找当前端口。但我也不知道如何:

a) 运行该程序并将输出用于 %p 变量;或者 b) 在first.server.com 上运行一个 cron 作业,写出一个包含端口的文本文件,或者设置一个环境变量等等。

实际上,我想这样做。是否可以?

主持某人
  用户布莱恩
  主机名本地主机
  端口 `sh get_port_for_somehost.sh`
  代理命令 ssh -p 2218[电子邮件受保护]-W %h:%p

我现在唯一能想到的就是在我的笔记本电脑上运行一个程序,在查询当前端口是什么后重写我的 .ssh/config ,但我不想这样做。

答案1

无法在配置文件中编写脚本来提取端口号的变量。

但是您可以编写一个bash函数来为您获取端口并将其放置到正确的位置。例如,将以下内容放置到~/.bashrc

function ssh-dynamic() {
  PORT=`sh get_port_for_somehost.sh`
  exec ssh -p "$PORT" somehost "$@"
}

其他配置可能保留在~/.ssh/config.

相关内容