![OpenSSH - 将 ~/.ssh/config 中的别名映射到命令行中的 IP 地址](https://linux22.com/image/28511/OpenSSH%20-%20%E5%B0%86%20~%2F.ssh%2Fconfig%20%E4%B8%AD%E7%9A%84%E5%88%AB%E5%90%8D%E6%98%A0%E5%B0%84%E5%88%B0%E5%91%BD%E4%BB%A4%E8%A1%8C%E4%B8%AD%E7%9A%84%20IP%20%E5%9C%B0%E5%9D%80.png)
是否可以在命令行中查询~/.ssh/config?假设我想在单独的程序中检索特定别名指向的 IP 地址,这可能吗?
答案1
如果我知道您只想返回 IP 地址,即 192.168.1.1,那么这是从命令行查询文件的一种(极其脆弱)方法,前提是您有适当的权限来读取该文件和你的.ssh/config
格式一致:
awk '/Host $youralias/ {getline; print $2}' .ssh/config
我发布此内容只是因为我想了解如何使用awk
它来执行此操作,但显然我的知识非常有限。
答案2
不太确定你在问什么......
假设您有“mainserver”的 SSH 别名,那么您可以执行以下操作ssh mainserver
。如果您希望它也适用于ping mainserver
,您需要在 中添加一个别名/etc/hosts
,如下所示:
/etc/主机:
192.168.0.1 comp-one
192.168.0.2 comp-two
192.168.0.20 mainserver
然后你就可以这样做ping mainserver
,它会 ping 通 192.168.0.20。
答案3
您可以使用该-G
选项ssh
:
-G
:导致ssh
在评估后打印其配置Host
并Match
阻止并退出。
所以对于这个例子,我们会使用
ssh -G $host | awk '$1 == "hostname" { print $2 }'
如果您确实需要 IP 地址而不是主机名,则可能需要对结果进行名称查找,但我假设您知道如何执行此操作。
ProxyCommand
请注意,例如,如果配置用于通过跳转主机进行连接,则这可能不是进行传出连接的实际主机。
答案4
您提到的文件是一个文本文件,它包含主机名并且可能IP地址识别您连接到的机器。可以使用该命令将主机名解析为 IP 地址host(1)
。格式非常简单,因此不难找出其中的内容。请注意,可以在文件中使用通配符(我的 states *.fedoraproject.org
)。