ssh-agent and crontab -- is there a good way to get these to meet?

In addition...

If your key have a passhphrase, keychain will ask you once (valid until you reboot the machine or kill the ssh-agent).

keychain is what you need! Just install it and add the follow code in your .bash_profile:

keychain ~/.ssh/id_dsa

So use the code below in your script to load the ssh-agent environment variables:

. ~/.keychain/$HOSTNAME-sh

Note: keychain also generates code to csh and fish shells.

Copied answer from https://serverfault.com/questions/92683/execute-rsync-command-over-ssh-with-an-ssh-agent-via-crontab


I had a similar problem. My script (that relied upon ssh keys) worked when I ran it manually but failed when run with crontab.

Manually defining the appropriate key with

ssh -i /path/to/key

didn't work.

But eventually I found out that the SSH_AUTH_SOCK was empty when the crontab was running SSH. I wasn't exactly sure why, but I just

env | grep SSH

copied the returned value and added this definition to the head of my crontab.

SSH_AUTH_SOCK="/tmp/value-you-get-from-above-command"

I'm out of depth as to what's happening here, but it fixed my problem. The crontab runs smoothly now.


When you run ssh-agent -s, it launches a background process that you'll need to kill later. So, the minimum is to change your hack to something like:

eval `ssh-agent -s` 
svn stuff
kill $SSH_AGENT_PID

However, I don't understand how this hack is working. Simply running an agent without also running ssh-add will not load any keys. Perhaps MacOS' ssh-agent is behaving differently than its manual page says it does.