- Что такое SSH
- Настройка SSH для доступа к удалённым GIT-репозиториям
- Как сменить адрес удаленного репозитория
В этом руководстве мы рассмотрим основные шаги по настройке SSH для работы с удаленными GIT-репозиториями.
Что такое SSH
SSH (Secure Shell) – это сетевой протокол, который используется для безопасного удаленного доступа к серверам и устройствам. В отличие от незащищённых протоколов (например, Telnet или FTP), SSH обеспечивает шифрование передаваемых данных, что позволяет защитить их от перехвата злоумышленниками. Протокол SSH используется для:
- выполнения команд на удаленных устройствах,
- управления серверами,
- передачи файлов,
- настройки сетевых подключений.
SSH работает по модели клиент-сервер, где клиент инициирует подключение, а сервер его принимает. Для аутентификации используются либо логин и пароль, либо более безопасные SSH-ключи. Протокол поддерживает туннелирование и пересылку портов, что расширяет его функциональность для различных задач.
SSH – это стандарт де-факто для систем на основе Linux и Unix, но он может использоваться и в Windows-среде с помощью специальных программ. Один из самых популярных вариантов для этой задачи – PuTTY.
Настройка SSH для доступа к удалённым GIT-репозиториям
Раньше для доступа к репозиториям через HTTPS из терминала можно было использовать пароли. Теперь при работе с командами вроде git clone, git fetch, git pull, и git push нужно использовать персональные токены доступа вместо стандартных паролей. Так можно повысить безопасность пользователей и защитить их данные от угроз, которые связаны с утечкой или взломом паролей.
Однако работа с HTTPS, даже с токенами, часто оказывается менее удобной по сравнению с SSH. Настройка доступа по SSH не только упрощает взаимодействие с удаленными репозиториями, но и позволяет избежать постоянного ввода токенов или паролей. Достаточно один раз настроить SSH-ключ, и дальнейшая работа станет автоматизированной и более безопасной.
Теперь перейдём к конкретным шагам, которые нужно выполнить для настройки SSH-доступа к удалённым GIT-репозиториям:
Если у вас уже есть пара SSH-ключей, которые вы планируете использовать для доступа к удаленным репозиториям, важно убедиться, что у приватного ключа выставлены правильные права доступа. Этот шаг очень важен для обеспечения безопасности, чтобы никто, кроме вас, не мог использовать этот ключ.
Проверьте и при необходимости установите права командой:
Если у вас еще нет SSH-ключей, вам нужно их сгенерировать. Это можно сделать с помощью утилиты ssh-keygen. Выполните следующую команду в терминале:
Флаг -t указывает, какой алгоритм будет использоваться для создания ключей. Современные платформы, по типу GitHub, GitLab и Yandex, рекомендуют использовать алгоритм ed25519 благодаря его высокой безопасности и производительности.
Когда утилита предложит сохранить ключ, можно оставить название файла по умолчанию или указать своё.
Далее вы можете установить пароль на ключ для дополнительной защиты. В таком случае, при каждом использовании SSH-ключа система будет запрашивать пароль. Однако, чтобы не вводить его каждый раз, можно настроить ssh-agent – менеджер для автоматической работы с ключами.
После завершения генерации, вы увидите «картинку» вашего ключа из ASCII-символов. Кроме того, в вашей директории ~/.ssh/ появятся два файла: приватный ключ id_ed25519 и публичный ключ id_ed25519.pub.
Для удобства работы вы можете переименовать эти файлы, например:
Теперь ваши SSH-ключи готовы для использования, и вы можете перейти к их добавлению в соответствующую систему, будь то GitHub, GitLab или другая платформа.
Чтобы SSH автоматически использовал нужные ключи при подключении к удаленным репозиториям, необходимо настроить файл конфигурации. Это позволит вам не указывать вручную путь к ключу при каждом подключении.
Откройте или создайте файл ~/.ssh/config и добавьте в него следующие строки:
HostName github.com
User git
IdentityFile ~/.ssh/personal_key
IdentitiesOnly yes
Где:
- «Host github.com» – это имя сервера, с которым вы будете работать. Оно должно совпадать с URL сервиса, в нашем случае – GitHub. То же самое имя указывается в параметре HostName.
- «User git» – имя пользователя, которое используется для подключения к серверу. Для GitHub это всегда пользователь git.
- «IdentityFile ~/.ssh/personal_key» – путь к приватному ключу, который будет применяться для аутентификации. Замените его на путь к вашему ключу, если вы использовали другое имя.
- «IdentitiesOnly yes» – этот параметр указывает SSH использовать только указанный ключ для аутентификации, что предотвращает ошибки при наличии множества ключей.
Эти настройки позволят вам автоматически использовать правильный ключ при подключении к GitHub.
Аналогичные конфигурации можно сделать для других сервисов, например, для GitLab. Добавьте в файл конфигурации новые секции, например:
HostName gitlab.com
User git
IdentityFile ~/.ssh/personal_key_gitlab
IdentitiesOnly yes
Таким образом, SSH будет корректно работать с разными платформами, используя соответствующие ключи для каждого из них.
Чтобы GitHub или другой сервис мог авторизовать ваше SSH-подключение, необходимо добавить ваш публичный SSH-ключ в настройки аккаунта. Это позволит сервису распознать вас как доверенного пользователя при работе с репозиториями.
Важно! Вы можете указать несколько ключей, если используете разные устройства или профили.
На GitHub процедура выглядит следующим образом:
- Перейдите в Settings, а затем – SSH and GPG keys.
- Нажмите New SSH key.
- В поле Key вставьте содержимое вашего публичного ключа, например, файла personal_key.pub (или id_ed25519.pub, если вы не переименовывали ключи).
- Щелкните Add SSH key.
На этом этапе ваш публичный ключ добавлен в GitHub. В других сервисах процедура будет аналогичной: найдите раздел для SSH-ключей и добавьте туда публичный ключ.
Когда вы впервые будете подключаться к GitHub по SSH, вам нужно будет добавить его в список доверенных хостов. Система выведет сообщение:
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'github.com' (RSA) to the list of known hosts.
Ответьте yes, чтобы подтвердить добавление GitHub в список доверенных хостов. После этого вы сможете свободно использовать SSH для доступа к вашим репозиториям.
Важно помнить, что при использовании протокола SSH путь к удаленным репозиториям будет отличаться от HTTPS-версии. Чтобы клонировать репозиторий через SSH, на странице репозитория выберите вкладку SSH и скопируйте указанный путь.
Далее используйте этот путь аналогично HTTPS в команде:
Теперь ваш доступ по SSH настроен, и вы можете спокойно работать с удаленными репозиториями.
Как сменить адрес удаленного репозитория
Если ваш репозиторий уже настроен на синхронизацию с удаленным сервером по протоколу HTTPS, но вы решили перейти на SSH для более удобной и безопасной работы, вам потребуется сменить адрес удаленного репозитория.
Для этого, находясь в локальном репозитории, выполните следующую команду:
Где:
- «serviceurl» – это URL сервиса, на котором размещён ваш удалённый репозиторий. Например, это может быть github.com или gitlab.com.
- «username» – ваш логин или имя пользователя на сервисе.
- «reponame» – название вашего репозитория.
Она обновит адрес удаленного репозитория с HTTPS на SSH.
Чтобы убедиться, что изменения вступили в силу, выполните команду:
Если все настроено корректно, в выводе вы увидите строки с обновленными путями:
Готово! Вы успешно сменили адрес удаленного репозитория.