écrire un script shell (ssh à une machine distante et d'exécuter des commandes
J'ai deux questions:
- Il y a plusieurs à distance de machines linux, et j'ai besoin d'écrire un script shell qui va exécuter la même série de commandes dans chaque machine. (Y compris certains sudo opérations). Comment cela peut-il être fait à l'aide de scripts shell?
- Quand ssh qui pratiquent à la machine distante, comment gérer lorsqu'il vous demande de RSA authentification par empreintes digitales.
Les machines à distance sont des ordinateurs virtuels créés sur la course et je viens d'avoir leurs adresses ip. Donc, je ne peux pas placer un fichier de script à l'avance dans les machines et de les exécuter à partir de ma machine.
- Je pense que du déploiement d'un agent-comme le programme de Linux à distance des machines de maintenir la connexion avec le serveur par prise réseau ( ou SSL ) connexion / périodique d'interrogation du serveur.
- J'ai besoin d'exécuter un ensemble de commandes en une seule fois, de sorte qu'il n'est pas nécessaire de maintenir la connexion
- "pas de scripts" signifie "pas de fichiers à tous", je suppose? Comment avez-vous gérer l'authentification? Vous pouvez désactiver l'hôte de la vérification des empreintes digitales (voir ma réponse), mais vous obtenez toujours interactif invite de mot de passe si vous n'avez pas l'installation d'une clé publique/privée.
- Andreas: oui. pas de fichiers. le passwd invite peut être manipulé à l'aide de
expect
comme " s'attendre à "?assword:" `
Vous devez vous connecter pour publier un commentaire.
Vous pouvez faire cela avec ssh, par exemple:
Vous pouvez ajouter la
StrictHostKeyChecking=no
option pour ssh:Ce sera désactiver la clé de l'hôte vérifier et ajouter automatiquement la clé de l'hôte à la liste des hôtes connus. Si vous ne voulez pas avoir l'hôte ajouté le fichier hosts, ajoutez l'option
-o UserKnownHostsFile=/dev/null
.Noter que cette désactive certaines vérifications de sécurité, par exemple, la protection contre l'homme-dans-le-milieu-attaque. Il ne devrait donc pas être appliqué dans un environnement sensible.
ssh
à partir d'un script shellIl y a un certain nombre de façons de gérer cette situation.
Ma façon préférée consiste à installer http://pamsshagentauth.sourceforge.net/ sur les systèmes distants et aussi votre propre clé publique. (Trouver un moyen d'obtenir ces installé sur la machine virtuelle, d'une certaine manière vous avez obtenu l'ensemble d'un système Unix installé, ce qui est un couple de plusieurs fichiers?)
Avec votre agent ssh transmis, vous pouvez maintenant vous connecter à chaque système sans mot de passe.
Et même mieux, que le module pam s'authentifier pour sudo avec votre paire de clés ssh de sorte que vous pouvez exécuter avec les privilèges root (ou de tout autre utilisateur) droits en tant que de besoin.
Vous n'avez pas besoin de s'inquiéter à propos de la clé d'hôte de l'interaction. Si l'entrée n'est pas un terminal puis ssh juste de limiter votre capacité à transmettre des agents et de s'authentifier avec un mot de passe.
Vous devriez également regarder dans les paquets comme Capistrano. Certainement regarder autour de ce site; il comporte une introduction de script distant.
Individu lignes de script qui pourrait ressembler à quelque chose comme ceci:
Installer sshpass l'aide,
apt-get install sshpass
puis éditer le script et mettre vos machines linux IPs, les noms d'utilisateur et le mot de passe dans l'ordre respectif. Après cela, exécutez le script. Thats it ! Ce script va installer VLC dans tous les systèmes.Si vous êtes capable d'écrire du code Perl, alors vous devriez envisager d'utiliser Net::OpenSSH::Parallèle.
Vous serait en mesure de décrire les actions qui doivent être exécutées dans chaque hôte de façon déclarative et le module de prendre soin de tous les effrayant de détails. Commandes en cours d'exécution à travers
sudo
est également pris en charge.Pour ce genre de tâches, j'ai à plusieurs reprises d'utiliser Ansible qui permet de dupliquer de manière cohérente les scripts bash dans plusieurs containets ou une machine virtuelle. Ansible (plus précisément Red Hat) maintenant a une interface web AWX qui est de l'édition libre de leurs commerciaux Tour.
Ansible: https://www.ansible.com/
AWX:https://github.com/ansible/awx
Ansible Tour: produit commercial, vous aurez probablement poing explorer l'open-source gratuit AWX, plutôt que de la 15days gratuit-trail du Tour
Ce travail pour moi.
Syntaxe : ssh -je pemfile.pem nom_utilisateur@adresse_ip 'command_1 ; commande 2; commande 3'
Vous pouvez suivre cette approche :