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.
Réponses:
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,sshpass
cela ne fonctionnera pas.la source
SSH_ASKPASS
variable 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.SSH_ASKPASS
ne fonctionne pas sur tous les systèmes. Même si le client le prend en charge, cela ne fonctionnera pas si le serveur utilisekeyboard-interactive
. J'ai effectivement rencontré ce problème lors de l'écriture d'un script pour distribuer unauthorized_keys
fichier à un certain nombre de machines intégrées.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!)
la source
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:la source