Подключение к агенту аутентификации SSH при выполнении команд с помощью sudo

На этот вопрос есть несколько ответов. Если вы хотите проверить, смонтировано ли specifc устройство или нет (т.е. ваше резервное устройство), то вам следует проверить его по UUID, который вы можете узнать, выполнив команду blkid.

UUID="place the UUID here"
TRIES=0
DEVFILE=""

while [[ -z $DEVFILE ]] && [[ $TRIES -lt 5 ]]; do
   DEVFILE=$(blkid -U $UUID)
   TRIES=$(( $TRIES + 1 ))
   sleep 5
done

if [ $TRIES -lt 5 ]; then
   MOUNTPOINT=$(findmnt -f $DEVFILE | tail -n1 | cut -d" " -f1)
   echo "found your device at $MOUNTPOINT"
fi
1
04.01.2019, 19:38
1 ответ

Причина, по которой это не сработало, заключалась в том, что переменная 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
3
27.01.2020, 23:23

Теги

Похожие вопросы