.ssh/configファイルを読み取り、IdentityFileまたはsshキーのみを使用するホストに接続し、リモートサーバーでコマンドを実行するbashスクリプトを作成しようとしています。問題は、IdentityFileを使用せず、パスワード経由で接続するホストが構成ファイルに含まれていることです。ファイル内のHostおよびIdentityFileブロックを明示的にgrepし、他のブロックを破棄する方法forループを使用してファイル内のすべてのホストに接続するスクリプトをすでに作成しましたが、それは100%が望むものではありません。ありがとうございました。私の.ssh/configファイルは次のようになります。
Host centos7-mp1
Hostname 192.168.89.102
user root
IdentityFile /root/.ssh/keys/id_rsa_passwordless
Host centos6-mp2
Hostname 192.168.89.103
user root
IdentityFile /root/.ssh/keys/id_rsa_passwordless
Host centosvm-test
Hostname 192.168.56.233
user test
段落モードのawk
は、この場合に便利です。複数行レコードがあり、1つ以上の空白行で区切られている場合。 Host
に一致するレコードのIdentityFile
キー(2番目のフィールド)の値を出力するには、次のようにします。
awk '/IdentityFile/ {print $2}' RS= .ssh/config
IdentityFile
を大文字と小文字を区別せずに一致させる必要がある場合は、次のように変更できます。
awk 'toupper($0) ~ /IDENTITYFILE/ {print $2}' RS= .ssh/config
または(GNU awk)
gawk '/IdentityFile/ {print $2}' RS= IGNORECASE=1 .ssh/config
ファイル内のGrep固有の文字列。 grepの場合:
$ grep -i 'string' ~/path/to/config/file/
これがまさにあなたが望むものであるなら..