シェルスクリプトを書いています。ここでは、ssh設定ファイルからIdentityFile
を入手する必要があります。 SSHの設定ファイルは次のようになります。シェルスクリプトを使って可変ホスト名に基づくssh設定からIdentityFileを手に入れてください
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}
というシェル変数によって提供されます。
私は、単一の特定Hostname
に基づいて単一の特定IdentityFile
のための設定ファイルとgrepを読むためにBash extract user for a particular host from ssh config fileで答えを使用することができましたが、私は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 -G HOSTNAME
オプションを持たないssh(OpenSSH_6.6.1)の古いバージョンを使用してもスタックされています。
awk変数については何がわかりませんか?これを行うより良い方法はありますか? GNUのgrepのとPerl互換正規表現で
この提案に感謝@Cyrus。これは私のために働いた。私はあなたの答えを選んでいます。なぜなら、 'grep'はより簡潔にするためです。 – Wimateeka