2010-10-15 9 views
3

Je sais que nous devons faire ssh utilisateur @ cible mais où est-ce que nous spécifions le mot de passe?Comment utiliser la commande ssh dans un script shell?


Hmm merci pour toutes vos réponses. Mon exigence est que je dois démarrer quelques serveurs sur différentes machines. Tous les serveurs doivent être démarrés avec un script shell. Eh bien, entrer un mot de passe à chaque fois semble un peu mauvais mais je suppose que je devrai recourir à cette option. Une des raisons pour lesquelles je ne veux pas sauvegarder les clés publiques est que je ne peux pas me connecter aux mêmes machines à chaque fois. Il est facile de revenir en arrière et de modifier le script pour changer les adresses cibles.

+0

Je suis confus: si vos clés sont toutes sur les machines respectives, cela vous donne le potentiel de les appeler sans mot de passe (en supposant que vous n'associez pas une phrase secrète avec les clés). Cela ne signifie pas que vous devez vous connecter à chaque machine avec une clé. – wlangstroth

Répondre

2

Cela ne peut pas être fait avec une simple commande ssh, pour des raisons de sécurité. Si vous souhaitez utiliser la route de mot de passe avec ssh, le lien ci-dessous présente quelques scripts pour contourner ce problème, si vous êtes insistante:

Scripts to automate password entry

6

La meilleure façon de le faire est en générant une clé privée/publique paire et en stockant votre clé publique sur le serveur distant. C'est un moyen sécurisé de se connecter sans entrer de mot de passe à chaque fois. Read more here

+0

Pour ceux sur Windows, je recommande le "putty" ensemble d'outils. Pour ce scénario, l'outil Pageant gérerait la gestion des clés. pglombardo donne un aperçu de l'utilisation de la clé publique auth sur * nix. Je l'ai mis en place plusieurs fois sur Linux, et cela peut parfois être un défi. Si vous rencontrez des problèmes spécifiques lors de la configuration, affichez-les ici – RyanHennig

+0

Je pense que le lien est cassé. – ComputerScientist

2

La commande ssh vous demandera votre mot de passe. Il est dangereux de spécifier des mots de passe sur la ligne de commande, car la commande complète qui est exécutée est généralement visible dans le monde entier (par exemple ps aux) et est également enregistrée en texte brut dans votre fichier d'historique des commandes. Tout programme bien écrit (y compris ssh) demandera le mot de passe si nécessaire, et désactivera l'écho du télétype afin qu'il ne soit pas visible sur le terminal.

Si vous tentez d'exécuter ssh à partir de cron ou de l'arrière-plan, utilisez ssh-agent.

2

La façon dont je l'ai fait dans le passé est juste de mettre en place une paire de clés d'authentification. De cette façon, vous pouvez vous connecter sans jamais avoir à spécifier de mot de passe et cela fonctionne dans les scripts shell. Il y a un bon tutoriel ici:

http://linuxproblem.org/art_9.html

0

Si vous voulez vraiment utiliser l'authentification par mot de passe, vous pouvez attendre. Voir here pour un exemple

1

Les clés SSH sont la solution standard/suggérée. Les clés doivent être configurées pour l'utilisateur que le script va exécuter.

Pour que l'utilisateur du script, si vous avez une configuration de touches dans ~/.ssh/(fichiers clés se terminera par une extension .pub)

Si vous n'avez pas la configuration des touches que vous pouvez exécuter:

ssh-keygen -t rsa 

qui va générer ~/.ssh/id_rsa.pub (l'option -t a d'autres types aussi bien)

Vous pouvez ensuite copier le contenu de ce fichier ~ (utiliser.En à distance)/.ssh/authorized_keys sur la machine distante.

En tant qu'utilisateur de script, vous pouvez vérifier que cela fonctionne par:

ssh [email protected] 

Vous devez être connecté sans mot de passe.Dans le même ordre d'idée, maintenant que votre script est exécuté à partir de cet utilisateur, il peut auto SSH sur l'ordinateur distant.

Questions connexes