Я размещаю репозиторий git на своем сервере. Любой может push
/ pull
со следующего удаленного URL:
ssh://git@example.com/opt/git/my-project.git
В частности, любой, у кого ssh
доступ к git@example.com
пользователь может нажимать / тянуть (т.е. у меня их открытый ключ указан как authorized_key
)
Я бы хотел и дальше разрешать доступ push / pull, но хочу отключить доступ к оболочке / логину
Github использует этот подход - если вы попытаетесь использовать ssh на любом из их серверов git, вы получите:
$ ssh git@github.com
PTY allocation request failed on channel 0
Hi [USER]! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.
В частности, я бы хотел -
git
пользовательroot
), чтобы иметь возможность предположить git
пользователь в интерактивном режиме push
/ pull
в репозиторииЯ попытался отключить оболочку для git
пользователь следующим образом:
root@example:~# usermod -s /usr/sbin/nologin git
Это отлично подходит для №1 (ssh
доступ заблокирован) и №2 (я все еще могу получить доступ к оболочке с sudo -u git -s /bin/bash
)
Однако №3 не может быть выполнен. Отключение доступа к оболочке, по-видимому, также отключает push
/pull
доступ (поскольку он, вероятно, использует ssh
).
Здесь есть другое решение? Как сам Github это делает?
Спасибо!
Самым простым решением было бы использовать git-shell в качестве оболочки входа пользователя.
Подробное описание того, как это настроить, можно найти здесь: https://git-scm.com/docs/git-shell или, альтернативно, на странице руководства git shell man git shell
В файле authorized_keys вы можете добавить параметры / ограничения к тому, что разрешено при аутентификации с определенной парой ключей.
Добавьте ограничения: no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
См. Описание формата файла authorized_keys в https://www.freebsd.org/cgi/man.cgi?sshd(8) для их значения
cat ~/.ssh/authorized_keys
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCB... comment
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDE... other comment
Вы можете добавить аналогичные ограничения для учетной записи git, установив их в блоке "match user" в файле sshd_config:
### add this to the bottom of the sshd_config
Match User git
X11Forwarding no
AllowTcpForwarding no
PermitTunnel no