Connectez-vous via SSH et saisissez votre mot de passe automatiquement, sans utiliser de clé publique

20

Un serveur autorise les connexions SSH, mais n'utilise pas l'authentification par clé publique. Ce n'est pas en mon pouvoir de changer cela pour le moment (en raison de difficultés techniques, pas organisationnelles) mais je m'y attellerai dès que possible!

Ce dont j'ai besoin maintenant, c'est d'exécuter des commandes sur le serveur en utilisant l' authentification ancienne du compte + mot de passe à partir d' un script . Autrement dit, je dois le faire de manière non interactive. C'est possible? Et comment je fais?

Le client qui exécutera le script exécute Ubuntu Server 8.04. Le serveur exécute Cygwin et OpenSSH.

Effacé
la source
2
Quelles sont les difficultés techniques liées à l'activation de l'authentification par clé? Vous devriez peut-être plutôt poser cette question, ou en plus de celle-ci.
Zoredache
1
Je le demande. :-) serverfault.com/questions/125842/… J'ai simplement besoin d'un chemin d'évacuation pour l'instant, car je me tape la tête depuis un moment. Mais bien sûr, mon objectif est de le faire fonctionner à long terme.
Supprimé le

Réponses:

22

Il existe un utilitaire Linux appelé sshpass. Il vous permet de faire exactement ce que vous voulez et prendra un mot de passe de serveur soit comme argument de ligne de commande, soit à partir d'un fichier (je préfère cette façon, donc je n'ai pas mon mot de passe de serveur affiché dans l'historique du shell) et vous l'utilisez ainsi:

sshpass -f file_with_password ssh user@server ls -la

Cela ssh dans un serveur et s'exécutera ls -la. Une chose, cependant, vous devez d'abord manuellement ssh dans un serveur (si vous ne l'avez pas déjà fait), afin que le serveur soit ajouté à votre ~/.ssh/known_hosts. Si vous ne le faites pas, sshpasscela ne fonctionnera pas.

solefald
la source
2
Ce n'est pas une partie standard d'OpenSSH, et littéralement aucune de mes machines (Mac OS X 10.7, Ubuntu 12.04, FreeBSD 8, Debian 3.1) ne l'ont ...
voretaq7
@ voretaq7: sshpass est un projet SourceForge: sourceforge.net/projects/sshpass
kevinarpe
1
@KCArpe Je pense que vous avez manqué mon point ("Le monde entier n'est pas votre machine Linux - essayez de choisir des solutions qui fonctionnent dans d'autres endroits"). L'utilisation de la SSH_ASKPASSvariable est une solution plus générique qui fonctionne sur n'importe quel système avec OpenSSH et ne nécessite pas l'installation de logiciels supplémentaires. Pour certains d'entre nous (dans les industries réglementées), l'installation de nouveaux logiciels déclenche beaucoup de travail administratif.
voretaq7
@ voretaq7 L'utilisation SSH_ASKPASSne fonctionne pas sur tous les systèmes. Même si le client le prend en charge, cela ne fonctionnera pas si le serveur utilise keyboard-interactive. J'ai effectivement rencontré ce problème lors de l'écriture d'un script pour distribuer un authorized_keysfichier à un certain nombre de machines intégrées.
kasperd
8

Vous pouvez utiliser Expect pour ce faire. Évidemment, ce n'est pas préférable du point de vue de la sécurité, car cela vous obligera à utiliser un script qui contient votre mot de passe en texte clair. (Mais je n'insisterai pas sur ce point puisque vous avez dit dans votre question que vous envisagez d'utiliser l'authentification par clé publique dès que possible!)

Mox
la source
Il semble que cela résoudra mon problème! Je vérifierai demain. Ce n'est pas la solution finale, mais elle offre une certaine sécurité. Quand j'y pense, si l'utilisateur du script est le seul autorisé à lire le script. Ensuite, il sera aussi sécurisé que ma clé privée qui est également "uniquement" protégée par les autorisations du système de fichiers. Ou ai-je raté quelque chose?
Supprimé le
Je reviendrai avec des résultats demain. :-) Merci d'avoir répondu!
Supprimé le
Cela semble fonctionner. Mais sshpass était plus facile pour ce cas particulier à mon humble avis.
Supprimé le
7

Cela dépend un peu du langage de script que vous utilisez. Je script presque tout en python maintenant, où ce n'est pas un problème. Pyssh et Paramiko vous permettent simplement d'écrire le mot de passe sans problème.

Si vous avez l'intention de le faire avec des scripts (ba) sh et d'utiliser OpenSSH, cela devient plus difficile. OpenSSH vous empêche explicitement de mettre des mots de passe sur la ligne de commande (car tous les utilisateurs peuvent voir la ligne de commande en utilisant quelque chose comme ps -fe, ce qui est mauvais mojo). Dans ce cas, vous devrez interagir directement avec le programme ssh et avoir deux options:

  • Vous pouvez écrire une quantité considérable de code de support, en utilisant quelque chose comme Expect.
  • Vous faites un piratage en utilisant la variable SSH_ASKPASS, en lui disant d'appeler une application en retournant votre mot de passe et de l'exécuter comme un travail par lots pour l'empêcher de lire depuis le terminal.
pehrs
la source