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?
7 réponses
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
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
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:
- Installer ssh-askpass programme (apt-get, miam ...)
- mettez le
SSH_ASKPASS
variable (export SSH_ASKPASS=/usr/bin/ssh-askpass
) - à 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à.
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.
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
.
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: