如何在 ssh 配置中编辑主机名的中间部分(%h)?

如何在 ssh 配置中编辑主机名的中间部分(%h)?

在 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

相关内容