Использование команды git clone с sudo и SSH
Описание и решение проблемы при использовании команды git clone с sudo и ssh.
Оглавление
При попытке клонировать репозиторий через SSH с помощью команды sudo:
sudo git clone git@xxxxx.com:xxx/xxx/git
Вы скорее всего получите ошибку:
Permission denied(public key)
Couldn't read from remote repository
Давайте разберемся почему появляется такая ошибка.
Почему доступ запрещен
Когда вы отправляете SSH запрос на удаленный сервер, удаленный сервер разговаривает с вашим локальным ssh-агентом через сокет, на который ссылается переменная окружения SSH_AUTH_SOCK
.
На удаленном сервере вы можете сделать что-то вроде:
git clone git@github.com:my-github-account/my-repo.git
И git будет использовать ssh-agent, работающий на вашей локальной машине для аутентификации с помощью github и клонировании указанного репозитория. Но если вы выполните эту же команду с sudo
:
sudo git clone git@github.com:my-github-account/my-repo.git
То получите ошибку, которую я описал выше.
Это происходит потому что переменные среды недоступны для команд, работающих под sudo
.
Решения ошибки
Однако есть способы решения данной проблемы.
Передать переменную среды SSH_AUTH_SOCK в терминале
Можно явно указать переменную среды в команде, при клонировании репозитория:
sudo SSH_AUTH_SOCK=$SSH_AUTH_SOCK git clone git@github.com:my-github-account/my-repo.git
Создать файл в директории sudoers.d
Однако всегда прописывать эту переменную окружения не очень удобно. Хорошим решением будет создать файл по пути /etc/sudoers.d/99-keep-ssh-auth-sock-env
со следующим содержимым:
Defaults>root env_keep+=SSH_AUTH_SOCK
Редактировать этот файл нужно с помощью команды visudo -f
.
После этого можете клонировать репозитории через sudo
.
Время запросов: 0,4018 s
Количество запросов: 28
Источник: cache