Я пытаюсь клонировать репозиторий git, используя протокол SSH, например:
sudo git clone ryan@example.com:/var/www/repo
Но я получаю ошибку "Permission denied (publickey)". Однако я уже поместил свой открытый ключ в файл authorized_keys, и он отлично работает, когда я подключаюсь по SSH к тому же серверу с тем же пользователем, например:
ssh ryan@example.com
Он также отлично работает, если я клонирую один и тот же репозиторий на другой компьютер. Единственная разница между тем, как я настроил эти две машины, заключается в следующем: на машине, которая не работает, я вручную скопировал и вставил открытый ключ в authorized_keys. На работающей машине я установил ее с помощью ssh-copy-id. Использует ли git какой-то другой метод аутентификации, чем SSH, хотя я использую протокол SSH? Почему я могу подключиться через SSH, но не могу использовать git через SSH?
ОБНОВИТЬ:
Как предлагается ниже, проблема возникла из-за использования sudo
при клонировании. Затем это будет аутентифицироваться с использованием пользователя root, и, поскольку я отключил доступ SSH для root, он был заблокирован. Я решил это, добавив себя в www-data
группа, которая владеет локальным каталогом, а затем предоставляет права записи для группы.
Насколько я могу судить, ваш пользователь Райан должен иметь разрешения на /var/www/repo
каталог, которого по умолчанию не должно быть.
Итак, вам, вероятно, следует предоставить своим пользователям права доступа к каталогу или сделать пользователя частью группы, которая имеет к нему доступ.
пс. Во втором примере вы подключаетесь к дому вашего пользователя.
При запуске команд с sudo
они запускаются как целевой пользователь (в данном случае root, поскольку это пользователь по умолчанию, и вы не выбрали конкретного пользователя с -u username
вариант).
Это означает, что вместо ключей ssh используются ключи, принадлежащие root. Либо настройте git для пользователя root, чтобы он использовал пару ключей из вашей учетной записи, либо (сгенерируйте и) используйте пару ключей root ssh, чтобы получить авторизацию для вашего репозитория git