Je viens de passer de Snow Leopard à Lion, et mes tâches cron qui utilisent ssh ont cessé de fonctionner. Il semble que ssh-agent ne fonctionne plus comme prévu.
Voici une version bowdlerisée de mon script called-from-cron qui fonctionnait très bien sous Snow Leopard :
#!/bin/bash
whoami # just to verify I'm running as myself, not root
ssh-agent # just to see what it outputs
eval `ssh-agent`
ssh -vvv REMOTESERVER ls
Lorsqu'il est exécuté à partir de l'invite de commande, ce script fonctionne comme prévu.
Lorsqu'il est exécuté à partir de cron, il ne fonctionne pas. La sortie de ssh-agent semble normale :
SSH_AUTH_SOCK=/tmp/ssh-QRxPUMRxbu/agent.17147; export SSH_AUTH_SOCK;
SSH_AGENT_PID=17148; export SSH_AGENT_PID;
echo Agent pid 17148;
Agent pid 17150
Mais le ssh -vvv
montre qu'il échoue juste au moment où la clé privée doit être lue :
debug1: Server accepts key: pkalg ssh-dss blen 818
debug2: input_userauth_pk_ok: fp ...
debug3: sign_and_send_pubkey: DSA ...
debug1: PEM_read_PrivateKey failed
debug1: read PEM private key done: type <unknown>
debug1: read_passphrase: can't open /dev/tty: Device not configured
debug2: no passphrase given, try next key
En d'autres termes, il s'attend à ce que je tape la phrase de passe pour ~/.ssh/id_dsa
ce qui, bien entendu, ne fonctionne pas dans les tâches cron.
Tout cela a fonctionné dans Snow Leopard.
Notez que j'ai configuré Keychain Access de sorte que ssh
, ssh-agent
et ssh-add
sont autorisés à lire ma phrase de passe pour ma .ssh/id_dsa
ce qui me permet d'utiliser SSH à partir d'une invite de terminal sans avoir à saisir ma phrase de passe.
Est-ce que c'est un problème que je dois exécuter ssh-add
à un moment donné de mon processus de connexion ? L'exécuter à partir d'une invite bash standard n'aide pas le travail cron (bien que, curieusement, il me demande ma phrase de passe ... ce qui, à mon avis, n'est pas nécessaire en raison de la configuration de Keychain Access).
NOTE 1 - avant de me rediriger - je suis conscient qu'il y a une question similaire ici ( Mac OS X Lion et sshpass ) mais il s'agit spécifiquement d'un programme sshpass
que je n'utilise pas (bien que je pense que cette question trouverait également une réponse dans celle-ci).
NOTE 2 - Je réalise que les clés SSH sans phrase de passe résoudraient mon problème, mais je préfère ne pas suivre cette voie.