Вопрос или проблема
У меня есть репозиторий на Github, к которому я хочу получить доступ с двух разных машин на Linux.
Для первой машины я следовал инструкциям Github по созданию SSH-ключей и добавил полученный открытый ключ на Github. Этот клиент работает нормально.
Для второго клиента я скопировал файл /home/{user}/.ssh/id_rsa
с первого клиента. Я думал, что этого достаточно, но когда я пытаюсь подключиться, я получаю ‘Permission denied (publickey).’
Что я упустил?
Тот же SSH-ключ можно использовать с нескольких клиентов. У меня есть разные SSH-ключи для разных сетей, и они фактически хранятся на зашифрованном USB-накопителе, который я использую с нескольких разных компьютеров без проблем.
SSH очень важен к правам доступа к файлам, поэтому сначала я бы проверил все права от /home/{user}
до самого файла id_rsa
.
SSH на самом деле не заботится о праве записи для группы или других пользователей, так что убедитесь, что вы chmod go-w
вашему домашнему каталогу и каталогу ~/.ssh
в первую очередь. Я бы тоже убедился, что они принадлежат вашему пользователю chown ${USER}:${USER}
.
Для самого SSH-ключа я chmod 600
их…
Если хотите, у меня есть дополнительная информация о том, как я управляю своими SSH-ключами в моем ответе на другой вопрос о SSH.
Если вы получаете отказ в доступе с конца Github, это может означать, что он не распознает ваш скопированный SSH-ключ, а использует системный по умолчанию. Легкий способ обойти это – создать файл ~/.ssh/config
и поместить в него следующее:
Host github.com
Hostname github.com
User git
IdentityFile ~/.ssh/yourkeyfile
Это заставит ваш SSH-клиент использовать этот ключ только для github.com.
Надеюсь, это поможет.
Я знаю, что это старое, но думал, что стоит отметить, что вам также нужно скопировать публичный ключ на второй клиент или пересчитать его с помощью
ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
Из OpenSSH RFC4252:
- Метод аутентификации с помощью открытого ключа: “publickey”
Единственное обязательное имя метода аутентификации – “publickey”
аутентификация. Все реализации ДОЛЖНЫ поддерживать этот метод;
однако не всем пользователям необходимо иметь открытые ключи, и большинство местных
политик вряд ли потребует аутентификацию с использованием открытого ключа для всех
пользователей в ближайшем будущем.С помощью этого метода обладание закрытым ключом служит
аутентификацией. Этот метод работает, отправляя подпись, созданную
с помощью закрытого ключа пользователя. Сервер ДОЛЖЕН проверить, что ключ
является допустимым аутентификатором для пользователя и ДОЛЖЕН проверить, что
подпись действительна. Если обе проверки прошли, запрос на аутентификацию ДОЛЖЕН быть
принят; в противном случае он ДОЛЖЕН быть отклонен. Обратите внимание, что сервер МОЖЕТ
требовать дополнительной аутентификации после успешной аутентификации.
Ваш ssh-клиент начинает аутентификацию, отправляя открытый ключ (подпись, упомянутая выше жирным шрифтом) на сервер. Сервер, если открытый ключ является авторизованным, отправляет случайный идентификатор сессии обратно вашему клиенту. Ваш клиент затем кодирует этот идентификатор сессии с помощью закрытого ключа и отправляет его обратно на сервер. Сервер декодирует этот идентификатор сессии с помощью открытого ключа, и если он совпадает с оригинальным идентификатором сессии, то выполняет аутентификацию вашего клиента.
Это, вероятно, потому, что вы не скопировали права доступа к файлу на втором клиенте.
Но закрытый ключ является закрытым, правильный способ – создать новый закрытый ключ на втором клиенте и затем добавить его открытый ключ на Github.
Ответ или решение
Использование одного и того же SSH-ключа на нескольких машинах может показаться простым решением, но требует учета множества нюансов. Рассмотрим шаги и рекомендации по этому вопросу, связанные с доступом к репозиторию GitHub с двух разных Linux-машин.
1. Основы работы SSH-ключей
При работе с SSH-ключами важно знать, как они функционируют. SSH-ключи состоят из двух частей: приватного ключа и публичного ключа. Приватный ключ должен оставаться конфиденциальным и храниться только у пользователя, в то время как публичный ключ может быть сгенерирован и добавлен на сервер (в вашем случае — GitHub) для аутентификации.
2. Генерация и копирование ключей
В вашем случае вы создали SSH-ключ на первой машине, добавили публичный ключ в настройки GitHub и смогли установить соединение без проблем. Когда вы передали файл /home/{user}/.ssh/id_rsa
на вторую машину, вы сделали это, не учтя нескольких важных шагов. Ключи должны быть не только скопированы, но и правильно настроены на новой машине.
Рекомендации по копированию SSH-ключа:
- Убедитесь, что вы также скопировали публичный ключ (обычно
id_rsa.pub
), если хотите использовать его на новой машине, или сгенерируйте его заново, используяssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
. - После копирования приватного ключа убедитесь, что его разрешения установлены корректно: выполните команду
chmod 600 ~/.ssh/id_rsa
.
3. Проверка прав доступа к файлам и директориям
SSH крайне чувствителен к правам доступа к файлам. Несмотря на то, что вы скопировали приватный ключ на новую машину, неправильно настроенные права могут стать причиной ошибки "Permission denied (publickey)". Убедитесь, что:
- Доступ к вашему домашнему каталогу и к папке
~/.ssh
настроен правильно. Запустите следующие команды:chmod go-w /home/{user} chmod 700 ~/.ssh chmod 600 ~/.ssh/id_rsa
- Также рекомендуется проверить владельцев файла и папки с помощью команды
chown ${USER}:${USER} ~/.ssh
.
4. Настройка SSH-клиента для использования определенного ключа
Если вы хотите удостовериться, что SSH-клиент на второй машине использует именно нужный ключ, создайте файл конфигурации ~/.ssh/config
с содержимым:
Host github.com
Hostname github.com
User git
IdentityFile ~/.ssh/id_rsa
Это обеспечит использование указанного ключа именно для доступа к GitHub.
5. Обработка ошибок
При попытке подключиться к GitHub, если вы продолжаете получать ошибку "Permission denied", убедитесь, что:
- Правильно настроены права доступа к ключам.
- Публичный ключ добавлен в настройки вашего аккаунта GitHub.
- Вы используете правильный адрес репозитория.
Заключение
Использование одного и того же SSH-ключа на нескольких машинах может быть удобным, но требует соблюдения обязательных правил по безопасности. Убедитесь, что все настройки корректны, и тогда вы сможете легко управлять доступом к своим репозиториям. Если вы часто работаете с несколькими ключами или машинами, может быть полезным рассмотреть использование менеджера SSH-ключей для упрощения управления и защиты ваших ключей.
Следуя этим рекомендациям, вы сможете избежать большинства распространённых проблем при доступе к GitHub и обеспечить безопасность своей работы.