Запуск “безопасного” git-сервера по SSH без gitosis / gitolite?

#git #ssh

#git #ssh

Вопрос:

Возможно ли запустить git-сервер по ssh, используя authorized_keys и command= для ограничения доступа только к репозиториям git, без использования gitosis / gitolite?

Ответ №1:

Да, назначьте git shell в качестве оболочки входа для всех пользователей, которые должны иметь доступ только к git.

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

1. Ах, спасибо. Чтобы сделать это полезным, мне пришлось использовать command="…" из joey.kitenet.net/blog/entry/locking_down_ssh_authorized_keys , но, по крайней мере, это подсказало мне, на что обратить внимание. Спасибо.

2. Это ооооооооооооот 🙂

Ответ №2:

РЕДАКТИРОВАТЬ: Не уверен насчет всех внезапных отрицательных рейтингов; Я, очевидно, не говорю использовать Gitolite, поскольку OP специально попросил не использовать его. Я просто заявляю, что то, о чем он просит, составляет 95% от того, что делает крошечный исходный код Gitolite, и, следовательно, я говорю ему, где в этом исходном коде он может найти фрагмент, который он хотел бы скопировать, чтобы создать свой собственный.


Да, gitolite делает именно это. Это также не меняет пользовательскую оболочку.

 cat ~/.ssh/authorized_keys
command="/home/git/.gitolite/src/gl-auth-command jbruce",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAD3NzaC1yc2EABBBCIwAAAQEAtRFmADxUSCX97CS/Uh7/N0y0vL...
  

Обратите внимание, что это не выглядит как обычный authorized_keys на сервере, он также передает имя пользователя в качестве параметра, чтобы выполняемый скрипт знал, кому принадлежит этот ssh-ключ. Дополнительным преимуществом отказа от переключения оболочки пользователя (при сохранении ее безопасности) является то, что если вы попытаетесь подключиться по ssh непосредственно к компьютеру, он не только завершит сеанс, но и сообщит вам, к каким репозиториям у вас есть доступ, прежде чем он завершит, если он знает, кто вы.

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

1. Как следует из названия, я бы на самом деле предпочел избегать использования gito *. Это небольшой проект, который не нуждается ни в одной из функций, предлагаемых этими инструментами.

2. Дэвид, смысл в том, чтобы посмотреть, как gitolite это делает, поскольку это именно то, о чем ты просишь (authorized_keys и command =). Передача имени пользователя команде = — отличная идея, чтобы вы могли связать пользователя не только с ssh-ключом. Возьмите понравившиеся фрагменты или просто извлеките из них уроки и сделайте это с нуля.

Ответ №3:

Вы можете поместить это в начале каждой строки в authorized_keys2 :

 no-port-forwarding,no-agent-forwarding,command="/usr/bin/git-shell -c "$SSH_ORIGINAL_COMMAND"" 
  

Это позволит использовать только команды git по ssh, но все равно позволит вам стать этим пользователем, если вам нужно повозиться (с другой учетной записью):

 sudo -u git -i