Etape n°1 :
Installation, facile avec pip :
$ sudo pip install pssh Collecting pssh Downloading https://files.pythonhosted.org/packages/60/9a/8035af3a7d3d1617ae2c7c174efa4f154e5bf9c24b36b623413b38be8e4a/pssh-2.3.1.tar.gz Installing collected packages: pssh Running setup.py install for pssh ... done Successfully installed pssh-2.3.1
Etape n°2 :
Utilisation simple, tous les serveurs ont le même login (par exemple pi2base) et le même mot de passe :
$ cat pssh-hosts
192.168.0.80
192.168.0.70
192.168.0.71
192.168.0.72
192.168.0.73
192.168.0.74
$ pssh -h pssh-hosts -l pi2base -A -i "hostnamectl"
On fait donc la commande hostnamectl via le login pi2base, sur tous les serveurs dans le fichier pssh-hosts.
Plus complexe, les utilisateurs sont différents mais les mots de passe sont identiques :
pi2base) et le même mot de passe :
$ cat pssh-hosts user1@192.168.0.80 user2@192.168.0.70 user3@192.168.0.71 user4@192.168.0.72 user5@192.168.0.73 user6@192.168.0.74 $ pssh -h pssh-hosts -A -i "hostnamectl"
Encore plus complexe, sans demander les mots de passe :
$ apt-get install sshpass pssh
Ensuite il suffit de faire un script :
$ cat ssh-distant.sh #!/bin/bash serveur[1]=127.0.0.1 login[1]=xxxx password[1]=zzzz serveur[2]=192.168.0.70 login[2]=xxxx password[2]=zzzz serveur[3]=192.168.0.71 login[3]=xxxx password[3]=zzzz serveur[4]=192.168.0.72 login[4]=xxxx password[4]=zzzz serveur[5]=192.168.0.73 login[5]=xxxx password[5]=zzzz serveur[6]=192.168.0.74 login[6]=xxxx password[6]=zzzz for index in 1 2 3 4 5 6 do printf " cnx sur ${login[index]} \n" output=$(sshpass -p ${password[index]} ssh -o StrictHostKeyChecking=no ${login[index]}@${serveur[index]} ' hostnamectl ' 2>&1) #echo "$?" echo $output done history -c
La commande finale, permet de supprimer l’historique … sinon le mot de passe est en clair dans l’historique.
Par exemple :
$ ./ssh-distant.sh cnx sur xxxxx Static hostname: osmc Icon name: computer Machine ID: 1671b5b617884fdf85a465a5ac731b8f Boot ID: a312213621b54c2f953202f480a070d7 Operating System: Open Source Media Center Kernel: Linux 4.14.34-6-osmc Architecture: arm cnx sur xxxxx Static hostname: raspberrypi Icon name: computer Machine ID: 0b646f6436cf4076bc65ccf9a7517e6c Boot ID: dc978e5c9f4d41a5b4b126b2dd7e923f Operating System: Raspbian GNU/Linux 9 (stretch) Kernel: Linux 4.14.50+ Architecture: arm cnx sur xxxxx Static hostname: RASP3 Icon name: computer Machine ID: 5c7798e1c4144782bfc8e591138cce5f Boot ID: 7cd79bf1fa26484d8ff98b2cba06726c Operating System: Raspbian GNU/Linux 9 (stretch) Kernel: Linux 4.14.71-v7+ Architecture: arm cnx sur xxxxx Static hostname: RASP4 Icon name: computer Machine ID: b48f53ca95ae44f8bfc503090332c390 Boot ID: c66f163ff98e4d62b0f855b07a86e0ec Operating System: Raspbian GNU/Linux 9 (stretch) Kernel: Linux 4.14.50-v7+ Architecture: arm cnx sur xxxxx Static hostname: RASP5 Icon name: computer Machine ID: 45ed4ac581ef4f3fb099a4c8791a4787 Boot ID: e46e4361b8e44dae9f47b812525983ba Operating System: Raspbian GNU/Linux 9 (stretch) Kernel: Linux 4.14.50-v7+ Architecture: arm cnx sur xxxxx Static hostname: RASP6 Icon name: computer Machine ID: 072b46046e3a4cdea183a0f7d018a2a3 Boot ID: 0143eb44792f457dbe288e4bbd67a973 Operating System: Raspbian GNU/Linux 9 (stretch) Kernel: Linux 4.14.70-v7+ Architecture: arm
Sinon il reste Ansible, mais c’est beaucoup plus lourd :
$ sudo pip install ansible
… mais aussi plus performant. Il suffit de copier le fichier des hosts (pssh-hosts dans mon exemple) dans /etc/ansible/hosts . Sachant qu’il faut faire une clef : ssh-keygen, et ensuite il faut copier la clef : ssh-copy-id -i ~/.ssh/id_rsa.pub root@ip-host .
Le problème de ansible, c’est que sur Raspbian par défaut on a une erreur d’installation :
$ sudo pip install ansible ... arm-linux-gnueabihf-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fdebug-prefix-map=/build/python2.7-ttpzh8/python2.7-2.7.13=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DUSE__THREAD -DHAVE_SYNC_SYNCHRONIZE -I/usr/include/ffi -I/usr/include/libffi -I/usr/include/python2.7 -c c/_cffi_backend.c -o build/temp.linux-armv7l-2.7/c/_cffi_backend.o c/_cffi_backend.c:15:17: fatal error: ffi.h: Aucun fichier ou dossier de ce type #include ^ compilation terminated. error: command 'arm-linux-gnueabihf-gcc' failed with exit status 1 ---------------------------------------- Command "/usr/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-JTBUnP/cffi/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-6maTdm/install-record.txt --single-version-externally-managed --prefix /tmp/pip-build-env-JcZXMj --compile" failed with error code 1 in /tmp/pip-install-JTBUnP/cffi/ ---------------------------------------- Command "/usr/bin/python -m pip install --ignore-installed --no-user --prefix /tmp/pip-build-env-JcZXMj --no-warn-script-location --no-binary :none: --only-binary :none: -i https://pypi.org/simple -- setuptools wheel "cffi>=1.4.1; python_implementation != 'PyPy'"" failed with error code 1 in None
A suivre.