在我工作的环境中,我们使用隧道通过 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
.