Belov Solutions

Настройка Git-сервера с SSH-доступом

Введение

Эта статья описывает настройку Git-сервера с SSH-доступом на Linux (например, Ubuntu) с использованием метода authorized_keys для аутентификации. Мы рассмотрим создание пользователя git, настройку SSH-ключей, создание голого репозитория и ограничение доступа с помощью git-shell. Автоматизировать процесс можно с помощью команды ssh-copy-id.

Создание пользователя и настройка SSH

Создайте пользователя git и каталог .ssh для хранения ключей:

$ sudo adduser git
$ su git
$ cd
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys

Добавьте открытые SSH-ключи разработчиков в файл ~/.ssh/authorized_keys. Пример открытого ключа:

$ cat /tmp/id_rsa.tima.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4LojG6rs6hPB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4kYjh6541NYsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9EzSdfd8AcCIicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myivO7TCUSBdLQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPqdAv8JggJICUvax2T9va5 gsg-keypair

Добавьте ключи в файл authorized_keys:

$ cat /tmp/id_rsa.tima.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.dima.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.nina.pub >> ~/.ssh/authorized_keys

Примечание: Вместо ручного копирования можно использовать ssh-copy-id для автоматизации.

Создание голого репозитория

Создайте голый репозиторий на сервере в каталоге /srv/git:

$ cd /srv/git
$ mkdir project.git
$ cd project.git
$ git init --bare
Initialized empty Git repository in /srv/git/project.git/

Теперь разработчики (например, Нина) могут отправить проект в репозиторий:

# На компьютере Нины
$ cd myproject
$ git init
$ git add .
$ git commit -m 'Initial commit'
$ git remote add origin git@gitserver:/srv/git/project.git
$ git push origin master

Другие разработчики могут клонировать и отправлять изменения:

$ git clone git@gitserver:/srv/git/project.git
$ cd project
$ vim README
$ git commit -am 'Fix for README file'
$ git push origin master

Ограничение доступа с помощью git-shell

По умолчанию пользователи, подключающиеся как git, получают доступ к командной оболочке. Чтобы ограничить их только Git-командами, используйте git-shell:

  1. Проверьте наличие git-shell в /etc/shells:
$ cat /etc/shells
$ which git-shell
$ sudo -e /etc/shells  # Добавьте путь к git-shell, если его нет
  1. Измените оболочку пользователя git:
$ sudo chsh git -s $(which git-shell)

Теперь пользователь git не сможет получить доступ к обычной оболочке:

$ ssh git@gitserver
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to gitserver closed.

Для дополнительной безопасности добавьте ограничения в authorized_keys перед ключами:

no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4LojG6rs6hPB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4kYjh6541NYsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9EzSdfd8AcCIicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myivO7TCUSBdLQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPqdAv8JggJICUvax2T9va5 gsg-keypair

Это отключает перенаправление портов, X11, агенты и TTY, ограничивая доступ только Git-командами.

Дополнительные настройки

Для настройки поведения git-shell создайте подкаталог ~/git-shell-commands в домашнем каталоге пользователя git. Это позволяет ограничить команды Git или настроить пользовательские сообщения. Подробности: git help shell.

Заключение

Настройка Git-сервера с SSH-доступом включает создание пользователя git, добавление ключей в authorized_keys, создание голого репозитория и, при необходимости, ограничение доступа с помощью git-shell. Этот подход обеспечивает безопасный доступ для небольшой команды разработчиков.

Отзывы

Оставить отзыв

Ваша эл. почта не будет опубликована