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!STDIN is not a terminal
erreur. Cependant, on ne m'a pas demandé de mot de passe cette fois; Je crois que celaSSH_ASKPASS
fonctionne dans l'Automator car, si je crée le fichier enSSH_ASKPASS
retour avec le mauvais mot de passe, j'obtiens unePermission denied, please try again.
erreur.macOs >= 10.13
J'ai trouvé une solution (merci à Daniel Beck d'avoir fourni les informations clés nécessaires pour cela). Notez que je n'ai testé cela qu'avec OS X Lion 10.7.2. Si cela ne fonctionne pas pour vous, essayez la solution de Daniel.
Nous devons d'abord définir la
SSH_ASKPASS
variable d'environnement - sa valeur doit être le chemin d'accès à un programme qui imprime le mot de passe sur la sortie standard. Pour obtenir le mot de passe du trousseau, voici à quoi il doit ressembler (je l'appelleget-ssh-password.sh
):Quelques points à noter:
Cela suppose que vous avez stocké le mot de passe dans le trousseau de la manière que j'ai décrite dans la question
Le programme donné
SSH_ASKPASS
sera appelé sans aucun argument; nous utilisons donc des variables d'environnement pour lui transmettre l'utilisateur et le nom d'hôte.Maintenant, nous pouvons configurer
SSH_PASSWORD_USER
etSSH_PASSWORD_HOSTNAME
exécutersshpass
pour vous connecter à notre serveur.J'ai créé un autre script
ssh-kcpass
, pour ce faire:Pour vous connecter au serveur ssh sans taper de mot de passe, il vous suffit de lancer
ssh-kcpass user@hostname
.la source
macOS >= 10.13
Salut les gens Je suis tombé sur ce sujet à la recherche d'autre chose mais ... Je ne sais pas si je manque quelque chose ici ... mais votre approche me semble étrange. pourquoi ne pas simplement utiliser l'authentification par clé publique ... Générer une clé rsa $ ssh-keygen -t rsa -b 2048 -C 'email / id'
Idéalement, vous utiliseriez une fois l'utilisateur @ hôte ssh-copy-id et vous authentifieriez avec le mot de passe une fois pour installer la clé sur l'autre serveur, ou utiliser n'importe quel type de script ou d'outil d'authentification pour déployer la clé sur ~ / .ssh / authorized_keys sur l'autre hôte (pour l'utilisateur auquel vous souhaitez vous connecter) Si vous avez terminé avec la commande manuellement, vous devez alors modifier / etc / ssh / sshd_config en conséquence et w automation (chef, ansible), vous devez pousser la condiga complète pour l'état souhaité.
La clé qui compte pour distribuer est id_rsa.pub, gardez la clé privée sécurisée
Pour utiliser le trousseau pour vous authentifier auprès des hôtes de manière simple et automatique, éditez sur votre machine le ~ / .ssh / config et ajoutez:
Hôte * UseKeychain oui
Recherchez plus d'informations sur les options du fichier de configuration ssh, espérons que tout cela vous sera utile
la source