在 ssh 配置中,您可以通过在主机名后附加或添加某些内容来轻松编辑主机名。例如,当您想使用 连接到服务器时ssh test5
,但实际上服务器名称是 test5.mail,您可以按如下方式指定服务器:
Match exec "echo %h | grep -q '^test[0-9]$'"
HostName %h.mail
如果您需要在前面添加主机名,也可以采用相同的方法。
但是如果我想编辑主机名的中间部分怎么办?例如,我想以 身份连接ssh server1.storage
,但我要连接的实际地址是 server1.int.storage。
换句话说,我想在 %h 中间插入子字符串。
答案1
以下对我有用:
Match exec "echo %h | grep -q '^server[0-9]*.storage$'"
ProxyCommand ssh $(echo %h | sed 's/storage/int.storage/') nc $(echo %h | sed 's/storage/int.storage/') %p
我在此找到了代理命令的示例问题。但我不完全理解为什么需要 nc 和 %p 部分。在那里你指定了两次编辑命令。我只想指定一次,如下所示:
ProxyCommand ssh $(echo %h | sed 's/storage/int.storage/')
但它不起作用。
从上面链接的同一个问题中,我看到您还可以指定处理程序脚本。但似乎再次指定命令时需要进行两次编辑。所以我宁愿将所有内容放在一个地方 - 在 ssh 配置本身中。
如果有的话,将不胜感激解释和其他解决方案。
答案2
你可以只在代理命令中使用 nc 位,而不必重复 ssh
Match exec "echo %h | grep -q '^server[0-9]*.storage$'"
ProxyCommand nc $(echo %h | sed 's/storage/int.storage/') %p
在我的例子中,我将其用于非 DNS 可解析的 AWS EC2 名称
Match exec "echo %n | grep -qE '^ip-.*\.compute\.internal$'"
ProxyCommand nc $(echo %n | cut -d. -f1 | cut -d- -f2- | tr - .) %p