根据别名从ssh配置中获取主机名

12

我有一个类似这样的SSH配置文件:

Host myAlias
  HostName the.actual.host.name.com

是否可能在不连接到主机的情况下,从shell解析别名的主机名?我想要类似以下命令的效果:

$ <something> myAlias
the.actual.host.name.com
1个回答

25

尽管可以使用简单的awk脚本解析~/.ssh/config文件,但对于可能包含各种块等的任意配置文件可能无法正常工作。相反,考虑使用“ssh -G”命令,它将转储ssh会话的参数,然后提取主机名属性。

ssh -G myAlias | awk '$1 == "hostname" { print $2 }'
请注意,这样做的优点是支持所有 ssh 配置来源(本地配置、命令行、全局配置、环境变量等)。
为了完整起见,这里提供一个简单粗暴的 awk 解决方案。
awk -v H="myAlias" '
tolower($1) == "host" { m=$2 == H }
tolower($1) == "hostname" && m{ print $2 }
' ~/.ssh/config

1
太好了,我不知道有 -G 这个选项。谢谢。 - Joe Kearney
1
这太棒了。-G选项在帮助文本中不显示,在在线手册页中也没有列出,但在我的本地手册页中有。对于那些想知道的人:-G会导致ssh在评估主机和匹配块后打印其配置并退出。 - alwaysmpe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接