SSH и удалённые git-репозитории – два IT-инструмента, которые существенно облегчают разработку программного обеспечения и совместную работу над проектами. В этой статье мы рассмотрим, как они взаимодействуют друг с другом, какие возможности предоставляют разработчикам и как правильно настроить SSH, чтобы получить доступ к удалённым GIT-репозиториям.
В отличие от централизованных систем контроля версий, Git хранит полную историю проекта в каждом рабочем каталоге, что делает его независимым от сетевого подключения и обеспечивает возможность работать с репозиторием даже в оффлайн-режиме.
Git-репозиторий – это основа системы контроля версий Git. Он состоит из двух частей – локального и удаленного. Локальный располагается на компьютере каждого участника проекта и содержит полную версию проекта со всей историей изменений. Удаленный расположен на сервере и служит центральным хранилищем для совместной работы над проектом.
Git-репозитории предоставляют возможность совместной работы над проектом. Разработчики могут клонировать удаленный репозиторий на свои локальные машины, вносить изменения, а затем публиковать свои коммиты в удаленный репозиторий.
SSH (Secure SHell) – это протокол, предназначенный для обеспечения защищённого удалённого доступа и передачи данных между компьютерами по сети. Он считается основным инструментом для безопасной работы с удалёнными системами в различных областях, включая системное администрирование, разработку и облачные вычисления.
В основе работы SSH лежит асимметричное криптографическое шифрование, повышающее уровень защиты передаваемых данных. С помощью протокола создают шифрованные туннели, которые обеспечивают конфиденциальность, целостность и аутентификацию информации. Это позволяет пользователям осуществлять удаленное управление серверами, обмениваться данными и выполнять команды на удаленных машинах без риска несанкционированного доступа или перехвата информации злоумышленниками. А благодаря автоматической передачи ключей и использования публично-приватных ключей не нужно каждый раз вводить пароль при подключении к удаленным серверам.
Команды SSH также позволяют использовать протокол для туннелирования других протоколов, таких как FTP, HTTP или VNC, увеличивая гибкость и возможности пользователя.
SSH создан Тату Илоненом ещё в 1995 году для повышения безопасности программ удаленного входа в систему. И до сих пор он остаётся одним из самых популярных и широко используемых протоколов для безопасного соединения двух систем. Благодаря криптографии пользователи могут отказаться от традиционных методов аутентификации по паролю и вместо них использовать более надежные методы двухфакторной аутентификации, такие как цифровые сертификаты или биометрические данные.
Универсальность SSH делает его полезным не только для системных администраторов, но и для веб-разработчиков, которым необходим удаленный доступ к своему веб-серверу, или для инженеров-программистов, которым необходимо поддерживать безопасные каналы связи между системами. Кроме того, возможности шифрования обеспечивают дополнительную безопасность при работе с конфиденциальными данными клиентов, хранящимися на облачных серверах, или при передаче файлов по недоверенным сетям, например, через публичные точки Wi-Fi.
Администраторы могут изменять параметры в зависимости от своих потребностей, что делает протокол идеальным решением даже для небольших компаний с ограниченным штатом ИТ-специалистов, которым требуется большая гибкость. А универсальность SSH позволяет использовать его на различных операционных системах, что также упрощает настройку соединений. Работать можно на Windows, macOS, дистрибутивах Linux и даже на мобильных платформах, таких как Android и iOS.
Доступ к удалённым GIT-репозиториям делает возможной совместную работу над проектами и улучшениями их эффективности, обмениваясь кодом между командами и отслеживая изменения. С помощью системы контроля версий Git удобно просматривать историю проекта и при необходимости возвращаться к предыдущим версиям.
С 2021 года в GitHub нельзя применять личный пароль для доступа к репозиториям по https из терминала. Его заменил персональный токен доступа, который вводится при выполнении команд git clone, git fetch, git pull, или git push. Такой подход укрепил защиту от злоумышленников, предотвращая взлом и похищение паролей. Однако, доступ по ssh к удалённым репозиториям всё же удобнее.
Настройка SSH относительно проста, но для ее корректной работы необходимо выполнить несколько шагов, рассмотрим этот процесс подробнее.
Первым шагом для настройки SSH к удалённому git-репозиторию является генерация SSH-ключей. Они используются для аутентификации пользователя и позволяют безопасно обмениваться данными между устройствами.
Публичный ключ будет загружен на удаленный сервер, где расположено хранилище, а приватный хранится в безопасности у пользователя, которому необходим доступ.
Если ключи у вас уже есть, проверьте, что файл с приватным ключом имеет необходимые права доступа. Если нет, добавьте их.
chmod 600 ~/.ssh/personal_key
Если ключей нет, сгенерируйте их.
ssh-keygen -t ed25519
В данном примере флаг -t задаёт алгоритм, на базе которого формируются ключи. Название файла, где будет храниться ключ, можно оставить по умолчанию.
После генерации в терминале отобразится ключ, состоящий из ASCII-символов. Сами ключи будут храниться в папке ~/.ssh/, им соответствуют два файла: id_ed25519 и id_ed25519.pub. При желании их можно переименовать, чтобы в дальнейшем не запутаться.
mv ~/.ssh/id_ed25519 ~/.ssh/personal_key
mv ~/.ssh/id_ed25519.pub ~/.ssh/personal_key.pub
После генерации SSH-ключа необходимо добавить публичный ключ на удалённый сервер, с которым вы хотите работать. Это позволит серверу идентифицировать ваш компьютер.
Чтобы протокол SSH автоматически применял нужные ключи, добавьте в конфигурационный файл следующий блок.
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/personal_key
IdentitiesOnly yes
В нашем примере gihub.com – это url сервиса, а ~/.ssh/personal_key - путь до файла с приватным ключом.
Публичный ключ тоже нужно добавить в настройки, чтобы авторизация прошла успешно.
Дополнительно нужно добавить github.com в список доверенных хостов.
Если будете работать с другим сервисом, процедура будет аналогичной.
Если раньше синхронизация с сервером выполнялась протоколу https, то при переходе на ssh придётся сменить адрес удалённого репозитория. Делается это с команды в следующем формате.
git remote set-url origin git@serviceurl:username/reponame.git
Разберём, что она означает, чтобы указать корректные данные.
При первом подключении у вас будет запрошено ввести пароль для доступа к вашему приватному ключу. После ввода пароля ваш компьютер будет аутентифицирован на удалённом сервере, и вы сможете работать с репозиторием.
Убедитесь, что команда введена правильно.
git remote -v
В итоге вы должны поучить следующие значения.
Любые эксперименты в IT лучше проводить на выделенном сервере, чтобы нарушить функционировании других систем. Здесь можно подобрать сервер на ОС Linux https://www.nic.ru/catalog/hosting/linux-vps/
Для удобства работы с удалёнными git-репозиториями вы можете настроить агента аутентификации, который будет хранить ваш приватный ключ в памяти и автоматически использовать его при подключении к репозиторию.
Если требуется дополнительная защита приватного ключа, установите на него пароль. Для этого вам необходимо выполнить команду
ssh-keygen -p
Укажите расположение файла с приватным ключом и новый пароль. Пароль добавляет дополнительный слой безопасности и предотвращает несанкционированное использование вашего ключа.
Следуя вышеуказанным шагам, вы получите доступ к удаленным GIT-репозиториям и сможете настроить SSH для безопасного обмена данными. Это позволит эффективно сотрудничать над проектами и обмениваться изменениями.