Ayant un problème très étrange. J'ai créé un petit script bash qui exécute une commande sur un hôte distant via ssh (en utilisant l'authentification par clé publique).
Lorsque j'exécute ce script manuellement à partir de la ligne de commande, cela fonctionne bien, mais lorsqu'il est placé dans /etc/cron.hourly, il échoue avec une Permission denied, please try again.
erreur.
- J'ai explicitement défini la clé dans le script en utilisant
ssh -i /root/.ssh/id_rsa user@remote "command"
; - le script s'exécute en tant que root (j'ai ajouté un
echo `id` > /tmp/whoami.log
à revérifier); et - la clé ssh n'est pas protégée par mot de passe ...
Le système est un serveur Ubuntu 12.04, je n'ai pas beaucoup d'accès du côté distant pour dépanner, mais comme je l'ai dit, exécuter ssh manuellement ou le même script bash à partir de la ligne de commande fonctionne.
Une idée pourquoi cela se produit ou comment y remédier ??
mettre à jour
il s'est avéré que je me trompais, et la clé ssh était protégée par mot de passe (avec le trousseau chargeant l'agent ssh), d'où la raison pour laquelle elle a échoué à partir d'un script mais pas lors de l'exécution à partir de la session bash. L'ajout . ~/.keychain/$HOSTNAME-sh
à mon script a résolu le problème (merci à @grawity qui m'a pointé dans la bonne direction et a fourni une réponse complète).
SSH_AUTH_SOCK
je ne sais pas comment est lié (même si je suis heureux d'essayer quoi que ce soit). J'accède directement au fichier de clés et le fichier de clés n'est pas protégé par mot de passe. Quant à KRB5CCNAME
une recherche rapide, cela a quelque chose à voir avec Kerberos. Encore une fois - ne voyez pas le lien avec ce problème, mais peut-être que je manque quelque chose ici ...
-v
ssh
ssh -i
commande dans les deux cas ... J'essaierai de supprimer ces variables dans le script et de voir. Bonne suggestion à ajouter -v
- je vais aussi l'ajouter.
SSH_AUTH_SOCK
et de suppressionKRB5CCNAME
.