我正在编写一个shell脚本,需要从ssh配置文件中获取IdentityFile
。 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
我希望能够根据给定的Hostname
获取IdentityFile
后面的字符串并将其存入变量中。主机名将由一个名为${HOSTNAME}
的shell变量提供。
我已经成功使用Bash extract user for a particular host from ssh config file中的答案读取配置文件并基于单个特定的Hostname
和IdentityFile
进行grep,但我无法掌握将变量传递给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"
因为我提供了准确的主机名进行解析,所以这个方法可以正常工作。但是请注意,使用HTML标签时需要遵循格式要求。
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变量时,我错过了什么? 有更好的方法吗?
ssh -G
进行脚本编写。 - Wimateeka