使用带ProxyCommand的SSH代理时动态获取主机名的方法
动态获取目标主机的SSH代理配置方案
你可以通过SSH配置中的命令替换功能,直接从BRIDGEHOST上执行命令获取TARGETHOST的值,无需预先硬编码。以下是两种可行的配置方式:
方式一:在ProxyCommand中直接处理
这种方式会先连接到BRIDGEHOST,在代理主机上执行获取目标地址的命令,再建立转发连接:
Host bridge-test ProxyCommand ssh BRIDGEHOST 'TARGET=$(your-command-to-get-targethost); ssh -W "$TARGET:%p"'
将your-command-to-get-targethost替换为你在BRIDGEHOST上用来获取目标主机地址的实际命令(比如cat /path/to/target-host.txt或自定义脚本)。
方式二:动态赋值HostName
这种方式先本地执行命令获取目标主机地址,再通过ProxyCommand转发到该地址:
Host bridge-test HostName $(ssh BRIDGEHOST your-command-to-get-targethost) ProxyCommand ssh -W %h:%p BRIDGEHOST
注意事项
- 确保本地可以无密码登录BRIDGEHOST(比如配置SSH密钥对),否则每次执行都会触发密码验证,影响使用体验。
- 确认BRIDGEHOST上的获取命令能输出纯净的目标主机地址,不要包含多余的换行、空格或其他字符,否则会导致SSH连接失败。
内容的提问来源于stack exchange,提问作者John Titor
相关产品推荐
相关产品推荐

