gpt4 book ai didi

shell - 通过 shell 脚本基于变量主机名从 ssh 配置中获取 IdentityFile

转载 作者:行者123 更新时间:2023-12-05 00:14:55 26 4
gpt4 key购买 nike

我正在编写一个 shell 脚本,我需要在其中获取 IdentityFile从 ssh 配置文件。 ssh 配置文件如下所示:

​Host AAAA
User aaaa
IdentityFile /home/aaaa/.ssh/aaaaFILE
IdentitiesOnly yes
PubkeyAuthentication=yes
PreferredAuthentications=publickey
​Host BBBB
User bbbb
IdentityFile /home/aaaa/.ssh/bbbbFILE
IdentitiesOnly yes
PubkeyAuthentication=yes
PreferredAuthentications=publickey
​Host CCCC
User cccc
IdentityFile /home/aaaa/.ssh/ccccFILE
IdentitiesOnly yes
PubkeyAuthentication=yes
PreferredAuthentications=publickey

我想获取 IdentityFile 后面的字符串基于给定的 Hostname并将其放入一个变量中。主机名将由名为 ${HOSTNAME} 的 shell 变量提供。 .

我可以在 Bash extract user for a particular host from ssh config file 使用答案读取单个特定的配置文件和 grep IdentityFile基于单个特定 Hostname ,但我无法掌握将变量传递给 awk 的窍门。

到目前为止我已经尝试过
SSH_CONFIG="/home/aaaa/.ssh/config"
# Note AAAA is the hostname for this case
KEY=$(awk '/^Host AAAA$/{x=1}x&&/IdentityFile/{print $2;exit}' ${SSH_CONFIG})
echo "${KEY}"

OUTPUT: "/home/aaaa/.ssh/aaaaFILE"

之所以有效,是因为我提供了要解析的确切主机名。
但是使用
SSH_CONFIG="/home/aaaa/.ssh/config"
HOSTNAME=AAAA
KEY=$(awk -vcon="${HOSTNAME}" '/^Host con$/{x=1}x&&/IdentityFile/{print $2;exit}' ${SSH_CONFIG})
echo "${KEY}"

OUTPUT: ""

不起作用。我知道一个事实 ${HOSTNAME}正在设置是因为我正在设置自己(并响应它)。我想传递一个变量,因为我不希望对主机名进行硬编码,并且在调用脚本之前不知道该值是什么。

我也坚持使用旧版本的 ssh (OpenSSH_6.6.1),它没有方便 ssh -G HOSTNAME选项。

当谈到 awk 变量时,我缺少什么?有一个更好的方法吗?

最佳答案

我很欣赏脚本编写尝试,但 OpenSSH 客户端已经知道如何解析配置:

ssh -G $hosname | grep identityfile | awk '{print $2}' | head -n 1

请注意,它还会列出默认身份,但使用 IdentitiesOnly=yes它应该将配置中的一个列为第一个。

关于shell - 通过 shell 脚本基于变量主机名从 ssh 配置中获取 IdentityFile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45682741/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com