Дата публикации
15 Марта 2021
Дата изменения
15 Марта 2021
Уникальных просмотров
2.958

Оглавление

При попытке клонировать репозиторий через 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
Время запросов: 0,4018 s
Количество запросов: 28
Источник: cache