我正在编写一个 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}
.
我能够使用Bash extract user for a specific host from ssh config file的答案来读取配置文件并 grepIdentityFile
基于单个特定的单个特定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 变量时,我错过了什么?有一个更好的方法吗?