Причина, по которой это не сработало, заключалась в том, что переменная SSH_AUTH_SOCK
, используемая для хранения имени файла сокета домена Unix агента SSH, отсутствовала в среде при выполнении команд через sudo
.
По умолчанию параметр env_reset
включен в политике безопасности sudo
, и многие дистрибутивы GNU/Linux делают это явным, добавляя следующую строку в файл конфигурации /etc/sudoers
:
Defaults env_reset
Это гарантирует, что команды выполняются в минимальной среде с удалением большинства переменных среды вызывающего пользователя в ограниченной среде.
Определенные переменные могут быть -занесены в белый список, чтобы они сохранялись в среде. В целях безопасности я использую команду visudo
для редактирования файла конфигурации sudoers
. Кроме того, вместо того, чтобы изменять /etc/sudoers
напрямую, я добавляю пользовательские модификации в отдельный файл в каталоге /etc/sudoers.d/
. Для этого я запускаю sudo visudo -f /etc/sudoers.d/custom
, чтобы в конфигурации была следующая строка:
Defaults env_keep += "SSH_AUTH_SOCK"
Теперь запуск sudo ssh-add -l
показывает, что я могу подключиться к агенту аутентификации, и я могу продолжить и обновить удаленный репозиторий:
sudo git push --set-upstream origin master
Ваша установка кажется сломанной. Команда -line tool ldapdelete использует библиотеку, которая, вероятно, не была должным образом обновлена.
Ищите странные ошибки, возникающие при динамической компоновке:
ldd $(which ldapdelete)
И проверьте, какой пакет предоставляет ldapdelete:
rpm -qf $(which ldapdelete)