ssh_config 中的变量扩展

ssh_config 中的变量扩展

我有一些远程管理的设备这个描述,这样要从我的服务器连接,我输入:

ssh localhost -p 2870

由于我管理着很多主机,因此我想简化此操作,这样我就可以输入:

ssh 2870

我不想使用 bash 别名(从那时起我就不能使用 SCP 和 Ansible),所以尝试了以下方法~/.ssh/config

Host 28??
       HostName localhost
       Port %h

这会失败,因为无论出于何种原因 %h 都不会在端口行上扩展(它将在主机名和其他名称上扩展)。所以尝试了这个:

Host 28??
       ProxyCommand ssh -v localhost -p %h

这里 %h 展开正常,我可以看到它正常登录到服务器(通过公钥),但我没有收到提示。

关于如何在 ssh 配置中执行此“别名”有什么想法吗?

答案1

看来 %h 扩展在 Port 指令中不起作用。如果您不介意用大量条目填充 .ssh/config ,那么动态生成它们并不难(特别是如果您有一个列表,或者它们是连续的):

$(for port in `seq 2000 2900`
 do
   echo Host $port
   echo "  Hostname localhost"
   echo "  Port ${port}"
   echo ""
 done) >> ~/.ssh/config

由于我们可以查看ssh的源码,可以确认Port没有进行扩展:

读取conf.c:https://github.com/openssh/openssh-portable/blob/dc664d1bd0fc91b24406a3e9575b81c285b8342b/readconf.c

为主机和exec选项调用函数percent_expand - 这似乎是将%h转换为主机名的函数。从 ssh.c 调用相同的函数。有趣的是,ProxyCommand 似乎将这些变量的扩展推迟到以后。 Port 指令不调用它。

https://github.com/openssh/openssh-portable/blob/ed877ef653847d056bb433975d731b7a1132a979/misc.c

相关内容