В настоящее время у меня есть сценарий bash, работающий на моем сервере Linux, который раз в неделю просматривает мои репозитории, выполняет некоторые задачи и удаленно создает резервные копии.
Сегодня я начал резервное копирование и некоторых удаленных репозиториев. Мой план состоял в том, чтобы иметь возможность в сценарии резервного копирования bash запускать что-то вроде (cd $ dir && git pull origin master 2 >> $ LOGFILE) внутри цикла for. Проблема, с которой я столкнулся, заключается в том, что я пытаюсь вытащить кое-что из github, и для этого требуется, чтобы мой файл закрытого ключа был разблокирован, прежде чем продолжить. Могу ли я заранее указать этот пароль, чтобы не получать интерактивный запрос пароля?
Я думаю, что лучше сделать резервную копию от имени другого пользователя, поскольку ваш закрытый ключ, вероятно, также позволяет получить доступ к другим местам. Дайте этому пользователю закрытый ключ ssh без пароля и используйте этого пользователя в своих скриптах. На удаленном сервере git вы можете ограничить права других пользователей, чтобы можно было извлекать только ваши репозитории git.
Использовать Перенаправление агента SSH. Вам нужно будет использовать агент на вашей начальной машине; вам также необходимо включить переадресацию агента в вашем клиенте и на вашем сервере Linux.
Предполагая, что OpenSSH все вокруг:
test -z "$SSH_AUTH_SOCK" && eval "$(ssh-agent)"
ssh-add -f /path/to/your/key-accepted-by-GitHub
ssh-add -f /path/to/your/key-accepted-by-your-user-on-the-linux-box
ssh -A userName@theLinuxBox /path/to/the/script
В sshd на вашем сервере («yourLinuxBox») должен будет разрешить пересылку агента (AllowAgentForwarding
в его файле sshd_config; обычно по умолчанию «да», если нет).
Когда ваш локальный агент держит ключ GitHub и агент перенаправляется через ваше SSH-соединение в Linux, любое обычное использование ssh на коробке Linux, которой нужен ключ (например, git pull) сможет пользоваться.
Или вы можете использовать запись в своем .ssh/config
чтобы указать биты «первого участка», чтобы сократить последние две команды как ssh backup-server /path/to/the/script
(вам все равно нужно будет убедиться, что ключ GitHub добавлен в ваш локальный агент):
Host backup-server
HostName theLinuxBox # name or IP
User userName # username on remote system
IdentityFile /path/to/key-accepted-by-your-user-on-the-linux-box
ForwardAgent yes
Заметка: Не включать пересылку агента на ненадежные серверы (root на сервере может использовать свой локальный доступ для использования ключей, хранящихся в вашем локальном агенте).