Страницы

Поиск по вопросам

воскресенье, 15 декабря 2019 г.

Зачем нужен SSH при работе с Git?

#bitbucket #git #ssh #github


Когда я только начинал работать с Git, мне сразу сгенерировали ключи на GitHub. Прошло
время, и я совершенно не понимаю для чего они нужны. В BitBucket у меня нет никаких
ключей, но я могу создать репозиторий, клонировать его и успешно пушить без SSH. Или
делать пулл-реквесты.

Везде объясняют это с позиции работы с сервером, но и тут я не чую разницы. На локалке
делаю push. Все пушится на BitBucket. Делаю pull на моем инстансе в DO. Что не так?
    


Ответы

Ответ 1



Заглянем в ProGit: Git умеет работать с четырьмя сетевыми протоколами для передачи данных: локальный, SSH, "свой" протокол Git и HTTP[S]. Базовым протоколом является Локальный протокол, при использовании которого удалённым репозиторием считается просто каталог на диске. Не подходит для удалённого доступа через сеть, не считая частных случаев с использованием сетевых файловых систем (NFS, CIFS, etc.) Наверное, наиболее часто используемый транспортный протокол — это SSH. Причина в том, что доступ по SSH, как правило, уже настроен в большинстве окружений. Кроме того, SSH — единственный из сетевых протоколов, предоставляющий доступ и на чтение, и на запись. Два других сетевых протокола (HTTP[S] и Git) в большинстве случаев дают доступ только на чтение, поэтому даже если они вам доступны, вам всё равно понадобится SSH для записи. К тому же SSH — протокол с аутентификацией и шифрованием трафика "из коробки". Недостаток SSH в том, что, используя его, вы не можете обеспечить анонимный доступ к репозиторию. Другой вариант — "свой" Git-протокол. Вместе с Git'ом поставляется специальный демон, который слушает порт 9418 и предоставляет сервис, схожий с протоколом ssh, но абсолютно без аутентификации. Чтобы использовать Git-протокол для репозитория, вы должны создать файл git-daemon-export-ok, иначе демон не будет работать с этим репозиторием, но следует помнить, что в протоколе отсутствуют средства безопасности. Соответственно, любой репозиторий в Git'е может быть либо доступен для клонирования всем, либо не доступен никому. Как следствие, обычно вы не можете отправлять изменения по этому протоколу. Технически открыть доступ на запись можно, но из-за отсутствия авторизации в этом случае кто угодно, зная URL вашего проекта, сможет его изменить. Короче, это редко используемая возможность. И последний вариант — HTTP[S]. Прелесть протоколов HTTP и HTTPS в простоте их настройки. По сути, всё, что необходимо сделать — поместить голый репозиторий внутрь каталога с HTTP документами, установить перехватчик post-update и всё. Обратной стороной использования протокола HTTP является его относительно низкая эффективность для клиента. Обычно клонирование или извлечение изменений из репозитория при использовании HTTP гораздо продолжительнее, а объем данных и нагрузка на сеть намного больше, чем у любого другого имеющегося сетевого протокола. Итого: доступ к удалённому репозиторию по SSH — самый распространённый вариант настройки удалённого доступа, быстрый, удобный и безопасный. Настроив авторизацию в SSH по ключам, Вы будете избавлены от необходимости вводить пароли для доступа к репозиторию, сохраняя, однако, приемлемый уровень безопасности. Автор, а Вы уверены, что у Вас "всё пушится" не с помощью ssh сейчас?

Комментариев нет:

Отправить комментарий