В Linux (CentOS, в случае, если это имеет значение) у меня проблема с командами git. git может использовать преимущества ключей, загруженных в кэш ssh-agent, но если ключи не загружены, он не предпринимает никаких шагов для их загрузки (например, вызова ssh-add).
У меня ~/.ssh/config настроен так:
$ cat ~/.ssh/config
Host github.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_id_rsa
В моей системе уже настроен ssh-agent. Я считаю, что он использует реализацию, предоставленную Gnome ( http://live.gnome.org/GnomeKeyring/Ssh ).
Я могу вручную добавить свой ключ github с помощью команды "ssh-add". Когда я это делаю, я вижу, что ключ загружается с помощью «git add -l», а команды git, которые подключаются удаленно (например, "git remote update"), работают без запроса пароля.
Я по-прежнему хочу, чтобы команды git выполняли:
По умолчанию, если ssh-agent запущен, а необходимый ключ еще не загружен, используйте ssh-add для загрузки ключа в ssh-agent.
Похоже, что ssh-add нужна помощь (через параметр), если файл ключа не является одним из имен файлов по умолчанию (например, «id_rsa», «id_dsa» или «identity»). Это кажется отсталым. У меня есть отображение от имени хоста до IdentityFile, указанного в ~/.ssh/config, как показано выше. Разве ssh-add не сможет это использовать?
Также...
- Чтобы упростить проблему, я попытался удалить отображение «IdentityFile» из ssh-config и переименовать файлы ключей в имена по умолчанию (id_rsa и id_rsa.pub). Это позволяет «ssh-add» добавлять ключ без каких-либо дополнительных аргументов, но даже в этом упрощенном сценарии я не вижу команд git, добавляющих ключи в кэш ssh-agent.
У меня есть та же самая ~/.ssh/config на моей машине MacOS (Snow Leopard), и она, кажется, делает все правильно. Но как я могу получить такое поведение в Linux? Я не уверен, связано ли это с различием в реализации или конфигурации ssh-agent, ssh-add, git или какой-либо комбинации.
Изменить: Подумав об этом немного больше, я думаю, что это должно иметь гораздо больше общего с инструментами ssh (возможно, самое главное, ssh-agent?) а не мерзавец В конце концов, это поведение должно быть одинаковым для любого процесса, пытающегося установить ssh-соединения, используя ключи и настройки в ~/.ssh, включая саму команду ssh.