Github ssh настройка ubuntu
Обновлено: 05.07.2024
Давайте рассмотрим настройку доступа по SSH на стороне сервера. В этом примере мы будем использовать метод authorized_keys для аутентификации пользователей. Мы подразумеваем, что вы используете стандартный дистрибутив Linux типа Ubuntu.
Вместо ручного копирования и установки открытых ключей, многое из описанного ниже может быть автоматизировано за счёт использования команды ssh-copy-id .
Для начала создадим пользователя git и каталог .ssh для этого пользователя:
Затем вам нужно добавить открытые SSH-ключи разработчиков в файл authorized_keys пользователя git . Предположим, у вас уже есть несколько таких ключей и вы сохранили их во временные файлы. Напомним, открытый ключ выглядит примерно так:
Вы просто добавляете их в файл .ssh/authorized_keys в домашнем каталоге пользователя git :
Теперь вы можете создать пустой репозиторий для них, запустив git init с параметром --bare , что инициализирует репозиторий без рабочего каталога:
Теперь все остальные могут клонировать его и отправлять в него изменения:
Этим способом вы можете быстро получить Git-сервер с доступом на чтение/запись для небольшой группы разработчиков.
Заметьте, что теперь все эти пользователи могут заходить на сервер как пользователь git . Чтобы это предотвратить, нужно изменить ему оболочку на что-то другое в файле /etc/passwd .
Вы можете легко ограничить пользователя git только действиями, связанными с Git, с помощью ограниченной оболочки git-shell , поставляемой вместе с Git. Если указать её в качестве командного интерпретатора для пользователя git , то он не сможет получить доступ к обычной командной оболочке на вашем сервере. Для её использования, укажите git-shell вместо bash или csh для пользователя git . Для этого вы должны сначала добавить git-shell в /etc/shells если её там ещё нет:
Теперь можно изменить оболочку для пользователя используя chsh <username> -s <shell> :
Теперь пользователь git может использовать SSH соединение только для работы с репозиториями Git и не может зайти на машину. Если вы попробуете войти в систему, то вход будет отклонён:
На текущий момент пользователи всё ещё могут использовать перенаправление порта SSH для доступа к другим Git серверам, к которым текущий может подключиться. Если это нужно отключить, вы можете добавить следующие опции в файл authorized_keys перед теми ключами, для которых нужно применить это ограничение:
В результате файл будет выглядеть следующим образом:
В этом гайде покажу как создать ключ, загрузить на сервер и перенастроить локальный репозиторий на SSH доступ. В качестве примера используется Windows 10 и GitBash.
Что необходимо
- Gitbash или установленный git для Linux и macOS.
- Репозиторий на GitHub.
Создание пары ключей SSH
SSH (Secure SHell) - это протокол, который позволяет безопасно авторизоваться в различные сервисы, подключаться к удаленным терминалам, передавать по шифрованным каналам информацию. Очень распрастранен при работе с репозиториями. Использует пару ключей - публичный и приватный.
Открывайте GitBash или терминал, вводите:
💡 Если у вас будет ошибка: No such file or directory - создайте папку, выполнив команду:
После заходите в папку.
Для генерации ключа используется программа ssh-keygen , она обычно установлена, в Windows встроена в GitBash.
Github рекомендует использовать ключ типа ed25519, так как этот алгоритм на данный момент самый безопасный, с коротким открытым ключом (68 символов, против 544 у RSA) и что важно - быстро работает. За тип ключа отвечает параметр -t .
Длина ключа рекомендуется 4096 бит, при создании это параметр -b .
💡 При генерации ключей , ключи по-умолчанию будут сохранены в папке .ssh текущего пользователя.
В итоге для запуска генерации ключа, выполните:
Вам будут заданы несколько вопросов:
Куда сохранить файл ( Enter file in which to save. ) - нажмите Enter и по умолчанию ключ будет назван id_ed25519 и сохранится в .ssh папке профиля текущего пользователя. (в Windows папки пользователя в C:/Users, в macOs/Linux папка пользователя в /home)
Введите кодовую фразу ( Enter passphrase. ) - опционально, кодовая фраза это элемент безопасности. Если ваш приватный ключ попадет в чужие руки, им не смогут воспользоваться пока не подберут кодовую фразу. Это даст вам больше времени для замены ключей и отказа от скомпрометированного ключа. Предлагаю в данный момент отказаться от ключевой фразы и просто нажать Enter.
Подтвердить кодовую фразу или ее отсутсвие, тоже нажав Enter.
В результате вам покажут рисунок вашего ключа:
Проверьте, на месте ли ключи, выведите список файлов в папке .ssh :
Вывод должен быть таким:
первый файл это приватный ключ, а второй с .pub это публичный.
Активация ключа
Для того чтобы ключ использовался системой, необходимо добавить ключ в ssh-agent.
результат, номер процесса может отличаться:
Добавьте ранее созданный ключ:
При успехе получите ответ:
Ключи SSH готовы к использованию!
Добавление публичного ключа в профиль на GitHub
ℹ Кратко про ключи. С помощью публичного ключа, каждый может зашифровать информацию, расшифровать может только владелец приватного ключа, поэтому приватный ключ нельзя передавать, отправлять или хранить в открытом виде. Желательно пару ключей дополнительно скопировать на отдельный носитель, на случай потери ключа на компьютере.
В GitHub для работы с репозиториями скопируйте публичный ключ, одним из способов:
это скопирует публичный ключ в буфер обмена.
- если данная команда не работает, откройте файл id_ed25519.pub в любом текстовом редакторе, и скопируйте все содержимое файла, публичный ключ выглядит так:
Нажимайте не кнопку New SSH Key
В поле Key вставьте скопированный ключ:
В поле Title можете вставить название ключа, пригодится если у вас будет в профиле более одного ключа. Поможет их различать.
Нажимайте кнопку Add SSH Key .
Теперь можно использовать SSH доступ к вашим репозиторияем!
Получение репозитория по SSH
Откройте репозиторий и скопируйте ссылку для SSH доступа:
И как обычно используйте команду git clone:
Зайдите в репозиторий и скопируйте SSH ссылку доступа, перейдите в локальный репозиторий и удалите текущий remote origin:
и добавьте новый, последняя строка в команде это ссылка доступа SSH:
проверьте список удаленных репозиториев:
Качаем образ Ubuntu Server и записываем его на флешку:
Далее потребуются ненужный системный блок, монитор, мышка и клавиатура.
Ставим Ubuntu, в качестве имени хоста указываем, например, ubuntu-server , не забываем отметить Install OpenSSH Server , так как для управления сервером мы будем использовать ssh. После успешной установки перегружаемся.
Ставим на сервере Avahi Daemon, который делает машину доступной в локальной сети по имени хоста как <имя-хоста>.local .
Проверяем запущен ли сервис:
В Ubuntu особой настройки Avahi не требуется.
Делаем файлопомойку. У меня, например, есть несколько HDD, которые я объеденил в RAID-0 массив. Данные в RAID-0 записываются поочередно на два и более устройств, что увеличивает скорости чтения и записи. Недостатком является утеря данных при выходе одного из дисков, но для файлопоймойки это не принципиально.
Для общего доступа к файлам юудет использоваться NFS. Альтернативой NFS является Samba, которая сложна в настройке и без тонкой конфигурации показывает довольно низкую скорость передачи данных 7-11 MiB/s.
В /etc/exports добавляем строку:
И чтобы применить изменения вызываем:
Lines below this comment will be discarded
Подключение к серверу
Avahi нужен для того чтобы заработало подключение к хосту по имени (этот шаг можно пропустить и в дальнейшем подключаться по IP).
Так же нужно отредактировать /etc/nsswitch.conf , строчку hosts , добавив mdns_minimal [NOTFOUND=return] до resolve :
Запускаем Avahi демона:
Подлючение по SSH
Генерируем пару RSA-ключей для подключения по SSH (если требуется):
Чтобы не вводить постоянно пароль, добавляем пуьличный ключ на сервер:
Подкоючаемся к серверу:
Способы подключения по SSH
Запускаем PowerShell от имени администратора и ставим Putty:
Если у вас установлен WSL, то одключение к серверу ничем не будет отличаться от способа для Linux.
Доступ к расшаренным данным
Баг моей версии Windows: если при подключении сетевого диска указать имя хоста, то в проводнике он будет отображаться как Disconnected Network Drive.
Давайте рассмотрим настройку доступа по SSH на стороне сервера. В этом примере мы будем использовать метод authorized_keys для аутентификации пользователей. Мы подразумеваем, что вы используете стандартный дистрибутив Linux типа Ubuntu.
Вместо ручного копирования и установки открытых ключей, многое из описанного ниже может быть автоматизировано за счёт использования команды ssh-copy-id .
Для начала создадим пользователя git и каталог .ssh для этого пользователя:
Затем вам нужно добавить открытые SSH-ключи разработчиков в файл authorized_keys пользователя git . Предположим, у вас уже есть несколько таких ключей и вы сохранили их во временные файлы. Напомним, открытый ключ выглядит примерно так:
Вы просто добавляете их в файл .ssh/authorized_keys в домашнем каталоге пользователя git :
Теперь вы можете создать пустой репозиторий для них, запустив git init с параметром --bare , что инициализирует репозиторий без рабочего каталога:
Теперь все остальные могут клонировать его и отправлять в него изменения:
Этим способом вы можете быстро получить Git-сервер с доступом на чтение/запись для небольшой группы разработчиков.
Заметьте, что теперь все эти пользователи могут заходить на сервер как пользователь git . Чтобы это предотвратить, нужно изменить ему оболочку на что-то другое в файле /etc/passwd .
Вы можете легко ограничить пользователя git только действиями, связанными с Git, с помощью ограниченной оболочки git-shell , поставляемой вместе с Git. Если указать её в качестве командного интерпретатора для пользователя git , то он не сможет получить доступ к обычной командной оболочке на вашем сервере. Для её использования, укажите git-shell вместо bash или csh для пользователя git . Для этого вы должны сначала добавить git-shell в /etc/shells если её там ещё нет:
Теперь можно изменить оболочку для пользователя используя chsh <username> -s <shell> :
Теперь пользователь git может использовать SSH соединение только для работы с репозиториями Git и не может зайти на машину. Если вы попробуете войти в систему, то вход будет отклонён:
На текущий момент пользователи всё ещё могут использовать перенаправление порта SSH для доступа к другим Git серверам, к которым текущий может подключиться. Если это нужно отключить, вы можете добавить следующие опции в файл authorized_keys перед теми ключами, для которых нужно применить это ограничение:
В результате файл будет выглядеть следующим образом:
Читайте также: