#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