Comment utiliser bash/attendre pour vérifier si une connexion SSH fonctionne
Mon équipe gère un grand nombre de serveurs, la politique de la société prévoit que les mots de passe sur ces serveurs doivent être changés toutes les deux semaines. Parfois, notre base de données officielle des mots de passe devient hors de date pour quelque raison que ce soit (les gens oublient de le mettre à jour, en général), mais nous ne pouvons pas identifier ce parfois jusqu'à des mois plus tard, puisque nous ne sommes pas utiliser systématiquement chaque serveur.
Je veux écrire un script qui va gratter les mots de passe de la base de données, et d'utiliser ces mots de passe pour tenter une (ssh) de connexion pour chaque serveur, chaque soir, et envoyer un e-mail avec les résultats de l'équipe. Je suis en mesure de gratter la base de données pour les informations de connexion, mais je ne suis pas sûr de la façon de vérifier si le service ssh connexion a réussi ou pas en attendre.
Je ne peux pas utiliser l'authentification par clé publique pour cette tâche. Je voulez authentification par mot de passe afin que je puisse vérifier le mot de passe.
- Je désactiver la clé publique d'authentification en spécifiant le fichier suivant:
PasswordAuthentication=yes
PubkeyAuthentication=no
Mes tentatives de le script expect:
# $1 = host, $2 = user, $3 = password, $4 = config file
expect -c "spawn ssh $2@$1 -F $4
expect -re \".*?assword.*?\"
send \"$3\n\"
...
send \'^D\'"
J'ai pensé que peut-être la sortie d'état pourrait indiquer la réussite? Ne pouvais pas trouver quelque chose dans les pages de man.
Le mot de passe ne va pas dans le script. Les mots de passe sont raclées à partir d'une base de données et passées comme arguments de ligne de commande du script, ce qui est parfaitement logique pour moi. Et même si les gens ont la responsabilité de mettre à jour la base de données, souvent, ils ne le font pas. C'est un test de cohérence pour s'assurer que tous les mots de passe dans la base de données sont correctes.
OriginalL'auteur BlackSheep | 2012-09-05
Vous devez vous connecter pour publier un commentaire.
J'ai été en utilisant quelque chose comme le script ci-dessous pour une tâche similaire.
Cela fonctionne sur RHEL5 (attendez-5.43.0).
En haut, avez-vous quelque chose comme:#! /usr/bin/attendez -F? Je dois attendre 5.45 sur Ubuntu.
NVM, grâce à votre dernière modification je l'ai eu!
OriginalL'auteur crowbent
Ne vous avez spécifiquement besoin de vérifier si vous pouvez obtenir un shell ou tente d'exécuter une commande aussi OK ?
Si vous voulez juste pour vérifier l'authentification, vous voudrez peut-être faire
ssh asimplecommand
(à l'aide deecho
,hostname
, ou quelque chose comme tel) et de vérifier si vous obtenez le résultat attendu.Vous pouvez également lancer ssh avec
-v
option, et de regarder pourAuthentication succeeded
(à la debug1 niveau de journal).OriginalL'auteur huitseeker
crowbent vous a fourni un script expect pour tester une connexion ssh cependant je vous conseille d'utiliser Non-interactive ssh mot de passe auth pour les tests ssh/sftp. sshpass est beaucoup plus sécurisé et moins sujette aux erreurs que d'attendre.
OriginalL'auteur anubhava
La solution au problème sous-jacent (mot de passe de la base de données de sortir de synchronisation) est d'utiliser l'authentification par clé publique. Pour tout le monde. Ne vous embêtez PAS avec des mots de passe quand il s'agit de SSH.
Connexion réussie peut être vérifié comme ceci:
Le problème avec cette commande est celle - ci, il vous sera demander de mot de passe 3 fois ce qui est bâton de points dans le script.
OriginalL'auteur Ansgar Wiechers