Sessions SSH non interactives
Si vous n'avez pas besoin d'avoir une session interactive sur le serveur distant, vous pouvez l'exécuter sshdans un environnement sans tty, par exemple dans le cadre d'une action Run Shell Script dans Automator .
Vous devez créer un programme qui, lorsqu'il est appelé, imprime le mot de passe en sortie standard, par exemple le script bash suivant que vous devez rendre exécutable en utilisant chmod +x pwd.sh:
#!/usr/bin/env bash
echo "password"
Ensuite, définissez la SSH_ASKPASSvariable d'environnement sur le chemin d'accès à ce programme, puis exécutez sshdans l'action Automator, comme ceci:
export SSH_ASKPASS=/Users/danielbeck/pwd.sh
ssh user@hostname ls
Lorsqu'il n'y en a pas tty, mais SSH_ASKPASSet DISPLAY(pour X11, défini par défaut) sont définis, SSH exécute le programme spécifié par SSH_ASKPASSet utilise sa sortie comme mot de passe. Il est destiné à être utilisé dans des environnements graphiques, afin qu'une fenêtre puisse apparaître pour vous demander votre mot de passe. Dans ce cas, nous venons de sauter la fenêtre, en renvoyant le mot de passe de notre programme. Vous pouvez utiliser securitypour lire à partir de votre trousseau à la place, comme ceci:
#!/usr/bin/env bash
security find-generic-password -l password-item-label -g 2>&1 1>/dev/null | cut -d'"' -f2
ls(sur la sshligne de commande) est la commande exécutée une fois sshconnecté, et sa sortie est imprimée dans Automator. Vous pouvez bien sûr le rediriger vers un fichier pour enregistrer la sortie du programme que vous démarrez.
Sessions SSH interactives utilisant sshpass
J'ai téléchargé, compilé et installé sshpasset cela a parfaitement fonctionné. Voici ce que j'ai fait:
- Obtenez les outils de développement Apple
- Téléchargez et ouvrez
sshpass-1.05.tar.gz
- Ouvrez un shell dans le répertoire
sshpass-1.05
- Courir
./configure
- Courir
make
- Courez
make install(vous pourriez en avoir besoin sudo)
Maintenant, le programme est installé sur /usr/local/bin/sshpass. Exécutez en utilisant une ligne comme celle-ci:
sshpass -pYourPassword ssh username@hostname
Vous pouvez lire le mot de passe securityjuste avant de le faire et l'utiliser comme ceci:
SSHPASSWORD=$( security find-generic-password -l password-item-label -g 2>&1 1>/dev/null | cut -d'"' -f2 )
sshpass -p"$SSHPASSWORD" ssh username@hostname
Enveloppez-le dans une fonction shell et vous pouvez simplement taper par exemple ssh-yourhostnamepour vous connecter, le récupérer et entrer le mot de passe automatiquement.
STDIN is not a terminal. 2) Pour les sessions interactives avecsshpass, l'-poption ne fait apparemment rien. Mais courirsshpasspendant queSSH_ASKPASSça marche fonctionne!