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
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
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 ..