Ansible : Comment copier un fichier, un répertoire ou un script de l'hôte local vers l'hôte distant ?
Publié: 2019-02-24 Dans le cadre du service de gestion informatique, les gens traitent de lots of scripts
et outils de ligne de commande. Je suis sûr que vous faites face à une situation quotidienne dans laquelle vous devez copier des fichiers ou des scripts sur des milliers d'hôtes distants.
Les gens du service informatique ne se contentent pas de se connecter à chacun thousands of hosts
et d'exécuter le script manuellement. Et c'est pourquoi Ansible entre en scène. Ansible est une solution de gestion informatique très puissante disponible gratuitement pour nous.
Dans ce didacticiel, nous allons passer en revue les étapes pour copier des fichiers sur un hôte distant à l'aide d'Ansible.
Qu'est-ce qu'on va faire ?
Copiez le fichier crunchify.txt
de l'emplacement /opt/ashah/
vers le répertoire de destination de l'hôte distant 192.66.129.83
/opt/ashah/
.
Étape 1
Installez Ansible sur Linux Ubuntu ou macOS. Suivez les didacticiels pour passer en revue les étapes détaillées.
Étape 2
Comprenons quelques notions de base et l'emplacement des fichiers pour ce didacticiel :
- Emplacement du fichier de configuration : /etc/ansible/ansible.cfg
- Fichier de script : /opt/ashah/crunchify.yml
- fichier hosts : /opt/ashah/hosts
- fichier à copier : /opt/ashah/crunchify.txt (fichier de test)
Étape 3
contenu du fichier crunchify.yml
.
1 2 3 4 5 6 7 8 |
root @ localhost : / opt / ashah # cat crunchify.yml --- - hosts : crunchify - group tasks : - name : copy file to remote host copy : src : / opt / ashah / crunchify . txt dest : / opt / ashah |
Étape 4
hosts
le contenu du fichier. Assurez-vous de changer l'adresse IP de votre hôte distant.
1 2 3 4 |
root @ localhost : / opt / ashah # cat hosts #crunchify-group as a sample [ crunchify - group ] 192.66.129.83 |
Étape-5
Créez le fichier crunchify.txt
avec le contenu ci-dessous.
1 2 3 4 |
root @ localhost : / opt / ashah # cat crunchify.txt This is sample example copying file to remote location using Ansible . More ansible tutorials at https : //crunchify.com/tag/ansible/ |
Étape-6
Exécutez cette commande pour copier le fichier sur l'hôte distant :
-
Command
: ansible-playbook -b -vvv -u root crunchify.yml -kkkk –extra-vars « crunchify-group » -i hosts
comprenons tous les paramètres :
- -b : exécute les opérations avec devenir (identique à —become).
- -vvv : mode verbeux (-vvv pour plus, -vvvv pour activer le débogage de connexion).
- -u : se connecter en tant que cet utilisateur (par défaut=None).
- -kkkk : demande le mot de passe de connexion.
- –extra-vars : définissez des variables supplémentaires comme clé=valeur ou YAML/JSON, si le nom de fichier est précédé de @.
- -i : spécifiez le chemin de l'hôte d'inventaire ou une liste d'hôtes séparée par des virgules.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
root @ localhost : / opt / ashah # ansible-playbook -b -vvv -u root crunchify.yml -kkkk --extra-vars "crunchify-group" -i hosts Using / etc / ansible / ansible . cfg as config file SSH password : / opt / ashah / hosts did not meet host_list requirements , check plugin documentation if this is unexpected / opt / ashah / hosts did not meet script requirements , check plugin documentation if this is unexpected Parsed / opt / ashah / hosts inventory source with ini plugin PLAYBOOK : crunchify . yml * ************************************************************************************************************************ 1 plays in crunchify . yml PLAY [ crunchify - group ] ********************************************************************************************************************************* TASK [ Gathering Facts ] ************************************************************************************************************************ < 192.66.129.83 > ESTABLISH SSH CONNECTION FOR USER : root < 192.66.129.83 > SSH : EXEC sshpass - d9 ssh - C - o ControlMaster = auto - o ControlPersist = 60s - o User = root - o ConnectTimeout = 10 - o ControlPath =/ root / . ansible / cp / 5fca43321f 192.66.129.83 '/bin/sh -c ' "'" 'echo ~root && sleep 0' "'" '' < 192.66.129.83 > ( 0 , '/root\n' , '' ) < 192.66.129.83 > ESTABLISH SSH CONNECTION FOR USER : root < 192.66.129.83 > SSH : EXEC sshpass - d9 ssh - C - o ControlMaster = auto - o ControlPersist = 60s - o User = root - o ConnectTimeout = 10 - o ControlPath =/ root / . ansible / cp / 5fca43321f 192.66.129.83 '/bin/sh -c ' "'" '( umask 77 && mkdir -p "` echo /root/.ansible/tmp/ansible-tmp-1550966284.57-6253496643791 `" && echo ansible-tmp-1550966284.57-6253496643791="` echo /root/.ansible/tmp/ansible-tmp-1550966284.57-6253496643791 `" ) && sleep 0' "'" '' < 192.66.129.83 > ( 0 , 'ansible-tmp-1550966284.57-6253496643791=/root/.ansible/tmp/ansible-tmp-1550966284.57-6253496643791\n' , '' ) Using module file / usr / lib / python2 . 7 / dist - packages / ansible / modules / system / setup . py < 192.66.129.83 > PUT / root / . ansible / tmp / ansible - local - 32435HXzj7o / tmpjFxUXp TO / root / . ansible / tmp / ansible - tmp - 1550966284.57 - 6253496643791 / AnsiballZ_setup . py < 192.66.129.83 > SSH : EXEC sshpass - d9 sftp - o BatchMode = no - b - - C - o ControlMaster = auto - o ControlPersist = 60s - o User = root - o ConnectTimeout = 10 - o ControlPath =/ root / . ansible / cp / 5fca43321f '[192.66.129.83]' < 192.66.129.83 > ( 0 , 'sftp> put /root/.ansible/tmp/ansible-local-32435HXzj7o/tmpjFxUXp /root/.ansible/tmp/ansible-tmp-1550966284.57-6253496643791/AnsiballZ_setup.py\n' , '' ) < 192.66.129.83 > ESTABLISH SSH CONNECTION FOR USER : root < 192.66.129.83 > ESTABLISH SSH CONNECTION FOR USER : root < 192.66.129.83 > SSH : EXEC sshpass - d9 ssh - C - o ControlMaster = auto - o ControlPersist = 60s - o User = root - o ConnectTimeout = 10 - o ControlPath =/ root / . ansible / cp / 5fca43321f 192.66.129.83 '/bin/sh -c ' "'" 'rm -f -r /root/.ansible/tmp/ansible-tmp-1550966284.57-6253496643791/ > /dev/null 2>&1 && sleep 0' "'" '' < 192.66.129.83 > ( 0 , '' , '' ) ok : [ 192.66.129.83 ] TASK [ deploy topology ] ******************************************************************************************************************************************** ok : [ 192.66.129.83 ] = > { "changed" : false , "checksum" : "289b0c36372210c92bf028f2a19d57333af4d63c" , "dest" : "/opt/ashah/crunchify.txt" , "diff" : { "after" : { "path" : "/opt/ashah/crunchify.txt" } , "before" : { "path" : "/opt/ashah/crunchify.txt" } } , "gid" : 0 , "group" : "root" , "invocation" : { "module_args" : { "_diff_peek" : null , "_original_basename" : "crunchify.txt" , "access_time" : null , "access_time_format" : "%Y%m%d%H%M.%S" , "attributes" : null , "backup" : null , "content" : null , "delimiter" : null , "dest" : "/opt/ashah" , "directory_mode" : null , "follow" : true , "force" : false , "group" : null , "mode" : null , "modification_time" : null , "modification_time_format" : "%Y%m%d%H%M.%S" , "owner" : null , "path" : "/opt/ashah/crunchify.txt" , "recurse" : false , "regexp" : null , "remote_src" : null , "selevel" : null , "serole" : null , "setype" : null , "seuser" : null , "src" : null , "state" : "file" , "unsafe_writes" : null } } , "mode" : "0644" , "owner" : "root" , "path" : "/opt/ashah/crunchify.txt" , "size" : 21 , "state" : "file" , "uid" : 0 } PLAY RECAP * ******************************************************************************************************************************************************* 192.66.129.83 : ok = 2 changed = 0 unreachable = 0 failed = 0 |
C'est ça. Vous avez réussi à copier le fichier.

Comment vérifier si le fichier est copié sur un nouvel hôte distant ?
Connectez-vous simplement à l'hôte distant et vérifiez l'emplacement /opt/ashah
et vous verrez le fichier crunchify.txt
Comment copier le contenu d'un répertoire dans un autre répertoire ?
Modifiez simplement les valeurs src
et desc
du fichier crunchify.yml
. Voici un fichier crunchify.yml mis à jour.
1 2 3 4 5 6 7 8 |
root @ localhost : / opt / ashah # cat crunchify.yml --- - hosts : crunchify - group tasks : - name : copy all files from folder to remote host copy : src : / opt / ashah / dest : / opt / ashah / |
Tous les fichiers du dossier /opt/ashah/
seront désormais copiés sur les hôtes distants.
Faites-moi savoir si vous avez des questions sur la copie d'un fichier vers un emplacement distant à l'aide d'Ansible.