На этот вопрос есть несколько ответов. Если вы хотите проверить, смонтировано ли 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
Причина, по которой это не сработало, заключалась в том, что переменная 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