Введение
Эта статья описывает настройку 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:
- Проверьте наличие
git-shellв/etc/shells:
$ cat /etc/shells
$ which git-shell
$ sudo -e /etc/shells # Добавьте путь к git-shell, если его нет
- Измените оболочку пользователя
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. Этот подход обеспечивает безопасный доступ для небольшой команды разработчиков.
Отзывы