web-dev-qa-db-fra.com

Des chaînes spécifiques à Grep dans un fichier de configuration

j'essaie de créer un script bash qui lit le fichier .ssh/config et se connecte à des hôtes qui n'utilisent que la clé IdentityFile ou ssh et exécute des commandes sur des serveurs distants. Le problème est donc que le fichier de configuration contient des hôtes qui n'utilisent pas IdentityFile et ne se connectent pas via des mots de passe. Comment grep explicitement Host et IdentityFile bloque dans le fichier et rejette les autres? J'ai déjà fait le script qui se connecte à tous les hôtes dans le fichier avec pour la boucle, mais ce n'est pas ce que je veux à 100%. Je vous remercie. Mon fichier .ssh/config ressemble à ceci:

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 in mode paragraphe est utile dans ce cas - lorsque vous avez plusieurs lignes enregistrements qui sont séparées par une ou plusieurs lignes vides, par exemple. pour imprimer la valeur de la touche Host (deuxième champ) des enregistrements correspondant à IdentityFile vous pouvez le faire

awk '/IdentityFile/ {print $2}' RS= .ssh/config

Si vous devez faire correspondre IdentityFile sans tenir compte de la casse, vous pouvez le modifier en

awk 'toupper($0) ~ /IDENTITYFILE/ {print $2}' RS= .ssh/config

ou (avec GNU awk)

gawk '/IdentityFile/ {print $2}' RS= IGNORECASE=1 .ssh/config
2
steeldriver

Grep chaîne spécifique à l'intérieur d'un fichier. Pour grep:

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

Si c'est exactement ce que vous voulez ..

0
saviour123