web-dev-qa-db-ja.com

設定ファイル内のGrep固有の文字列

.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
1
Igor Mijatovic

段落モード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
2
steeldriver

ファイル内のGrep固有の文字列。 grepの場合:

$ grep -i 'string' ~/path/to/config/file/

これがまさにあなたが望むものであるなら..

0
saviour123