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

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

Ответы

Ответ 1

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

Ответ 2

РЕДАКТИРОВАТЬ: Не уверен во всех неожиданных отрицательных рейтингах; Я, очевидно, не говорю, чтобы использовать Gitolite, поскольку OP специально просил не использовать его. Я просто заявляю, что то, о чем он просит, составляет 95% того, что делает крошечный исходный код 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 на сервере, он также передает имя пользователя в качестве параметра, так что исполняемый script знает, к кому принадлежит этот ключ ssh. Дополнительное преимущество не переключать пользовательскую оболочку (при сохранении ее безопасности) заключается в том, что если вы попытаетесь выполнить 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