Я бы не рекомендовал запускать ssh-add
или выполнять expect
задания cron, так как запускать их в ограниченной среде, которую использует cron для выполнения своих заданий, слишком сложно, и я бы предпочел не хранить пароли в crontab.
Вместо того чтобы использовать ваш обычный ключ SSH, я бы создал новый ключ, который будет использоваться только для запуска команды, которую вы хотите запустить с помощью cron. Я бы настроил ключ без ключевой фразы и изменил бы его владельца / разрешения (0600) так, чтобы к нему можно было получить доступ только по эффективному идентификатору пользователя, под которым выполняется задание cron, т. Е. Идентификатору пользователей, чей crontab используется обработанный.
В вашем конкретном случае конкретная команда такова, git push
что новый ключ должен быть загружен на ваш сервер git. Большинство git-серверов должны иметь возможность принимать несколько открытых ключей SSH.
В целом, для автоматизированных процессов лучше всего создавать конкретные ключи без парольных фраз. Затем на удаленном SSH-сервере настраивается ограниченный набор разрешенных команд, добавляя пары опций к его строке в authorized_keys
файле, например:
command="automated-task.sh",client=my.local.host,no-pty,no-agent-forwarding,no-port-forwarding ssh-rsa AAA…public…part…of…specific…keypair automated_user@server
Отказ от ответственности: у меня больше опыта работы с GNU / Linux, чем с OS X, но AFAIK приведенная выше информация должна относиться ко всем * nix системам.