J'ai 6 serveurs dans mon environnement de test. Je veux écrire un script pour arrêter le serveur Tomcat dans toutes les boîtes en se connectant à une boîte au lieu de se connecter à chaque boîte.
S'il vous plaît, aidez-moi avec les scripts Shell, SSH et l'exécution d'un script dans toutes les autres cases. J'utilise SSH avec un mot de passe et un numéro de port personnalisé.
Vous devez combiner deux réponses Ask Ubuntu liées, une pour vous connecter à SSH via un port spécifique et une pour exécuter des commandes sur le serveur distant , en un seul script. Bien sûr, vous auriez besoin d'une forme de structure de données pour conserver la correspondance serveur + port. Cela peut être soit bash tableaux associatifs soit avec le script POSIX Shell - une déclaration de cas. En supposant que votre nom d'utilisateur sur tous les hôtes est le même, nous pourrions proposer quelque chose comme ceci:
#!/bin/sh
# bar Host has ssh server on port 22, while baz - on port 2222
Host_port(){
case "$1" in
"bar") echo 22 ;;
"baz") echo 2222 ;;
esac
}
# set positional parameters of script to hosts and iterate over them
set -- bar baz
for Host ; do
# command substitution will call function,
# function's return value will be the port number
ssh ssh://username@"$Host":"$(Host_port "$Host")" -t "systemctl stop Tomcat"
done
Maintenant, un avertissement géant : Ce n'est qu'un exemple. Je n'ai pas 6 serveurs pour tester le script, alors adaptez-le à vos besoins si besoin. Si vous avez des noms d'utilisateur différents sur chaque hôte, utilisez une autre instruction case
Note complémentaire sur la connexion: si vous avez une clé privée, qui est acceptée par les 6 serveurs, il sera facile de se connecter simplement en ajoutant -i ~/.ssh/id_rsa
. Une alternative à cela serait de créer un ~/.ssh/config
fichier contenant les informations de clé/mot de passe pour chaque hôte. Ceci est décrit dans réponse de Lekensteyn . Si vous n'êtes pas familier avec les clés SSH (et je comprends que c'est un sujet un peu déroutant), vous voudrez peut-être lire article ssh.com sur le sujet .
Vous pouvez utiliser sshpass:
Sudo apt install sshpass -y
alors vous pouvez exécuter la commande sur le serveur distant, par exemple
#!/bin/bash
# login info
Host='192.168.0.1'
USER='user'
PORT='2222'
PASSWORD='password'
# command
sshpass -p $PASSWORD ssh -p $PORT $USER@$Host touch 1.txt