Comment faire pour que ssh reçoive le mot de passe de stdin

Comment faire lire à SSH le mot de passe de stdin, ce qu'il ne fait pas par défaut?

16
demandé sur olamundo 2009-08-27 15:07:47

7 réponses

vous ne pouvez pas avec la plupart des clients SSH. Vous pouvez contourner cela en utilisant L'API SSH, comme Paramiko pour Python. Veillez à ne pas renverser toutes les politiques de sécurité.

9
répondu pvoosten 2009-08-27 11:14:52

sur la base de ce post vous pouvez faire:

créer une commande qui ouvre une session ssh en utilisant SSH_ASKPASS (seek SSH_ASKPASS on man ssh)

$ cat > ssh_session <<EOF
export SSH_ASKPASS="/path/to/script_returning_pass"
setsid ssh "your_user"@"your_host"
EOF

NOTE: pour éviter ssh d'essayer de demander sur tty nous utilisons setsid

créez un script qui retourne votre mot de passe (notez echo " echo)

$ echo "echo your_ssh_password" > /path/to/script_returning_pass

les rendre exécutables

$ chmod +x ssh_session
$ chmod +x /path/to/script_returning_pass

essayer

$ ./ssh_session

gardez à l'esprit que SSH signifie Secure shell, et que si vous stockez votre Utilisateur, votre hôte et votre mot de passe dans des fichiers texte, vous induisez l'outil en erreur et en créant une faille de sécurité possible

15
répondu albfan 2013-02-26 13:35:35

Vous pouvez utiliser sshpass qui est par exemple dans l'officiel dépôts debian. Exemple:

$ apt-get install sshpass
$ sshpass -p 'password' ssh username@server
12
répondu steffen 2014-07-10 14:16:59

un vieux post revigoré...

j'ai trouvé en cherchant une solution à exactement le même problème, j'ai trouvé quelque chose et j'espère que quelqu'un va un jour trouver utile:

  1. Installer ssh-askpass programme (apt-get, miam ...)
  2. mettez le SSH_ASKPASS variable (export SSH_ASKPASS=/usr/bin/ssh-askpass)
  3. à partir d'un terminal ouvrir une nouvelle connexion ssh sans variable de TERMINAL non définie (setsid ssh user@host)

Cela semble assez simple pour être sécurisé, mais n'a pas vérifier pour l'instant (juste en utilisant dans un cadre sécurisé).

nous y voilà.

4
répondu pier 2012-04-11 17:02:20

Je ne suis pas sûr de la raison pour laquelle vous avez besoin de cette fonctionnalité mais il semble que vous pouvez obtenir ce comportement avec ssh-keygen.

il vous permet de vous connecter à un serveur sans utiliser de mot de passe en ayant une clé RSA privée sur votre ordinateur et une clé RSA publique sur le serveur.

http://www.linuxproblem.org/art_9.html

4
répondu yyttr3 2014-07-12 02:47:51

liste de diffusion FreeBSD recommande l' attendre bibliothèque.

si vous avez besoin d'un login SSH programmatique, vous devriez vraiment être utilisation des logins à clé publique, cependant -- évidemment, il y a beaucoup moins de trous de sécurité de cette façon par rapport à l'utilisation d'une bibliothèque externe pour passer un mot de passe à travers stdin.

2
répondu Mark Rushakoff 2009-08-27 11:12:31

Distillation cette réponse laisse un script simple et générique:

#!/bin/bash
[[  =~ password: ]] && cat || SSH_ASKPASS="" DISPLAY=nothing:0 exec setsid "$@"

Save pass, faire un chmod +x pass et ensuite l'utiliser comme ceci:

$ echo mypass | pass ssh user@host ...

Si son premier argument contient password: puis il passe à son entrée à sa sortie (cat) sinon il lance whatver a été présenté après s'être positionné comme le SSH_ASKPASS programme.

Quand ssh rencontre les deux SSH_ASKPASS et DISPLAY set, il lancera le programme visé par SSH_ASKPASS, en passant, il l'invite user@host's password:

2
répondu starfry 2017-05-23 12:34:25