Я пишу сценарий оболочки, в котором мне нужно получить 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 пользователь для определенного хоста из файла конфигурации ssh, чтобы прочитать файл конфигурации и 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? Есть лучший способ сделать это?