Sessions SSH non interactives
Si vous n'avez pas besoin d'avoir une session interactive sur le serveur distant, vous pouvez l'exécuter ssh
dans 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_ASKPASS
variable d'environnement sur le chemin d'accès à ce programme, puis exécutez ssh
dans 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_ASKPASS
et DISPLAY
(pour X11, défini par défaut) sont définis, SSH exécute le programme spécifié par SSH_ASKPASS
et 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 security
pour 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 ssh
ligne de commande) est la commande exécutée une fois ssh
connecté, 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é sshpass
et 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 security
juste 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-yourhostname
pour 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'-p
option ne fait apparemment rien. Mais courirsshpass
pendant queSSH_ASKPASS
ça marche fonctionne!