Я хотел бы иметь возможность использовать ключ ssh для аутентификации, но все же ограничить команды, которые могут быть выполнены через туннель ssh.
С Subversion я достиг этого, используя файл .ssh / authorized_keys, например:
command="/usr/local/bin/svnserve -t --tunnel-user matt -r /path/to/repository",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAABIetc...
Я пробовал это с "/ usr / bin / git-shell" в команде, но я просто получаю старое fatal: What do you think I am? A shell?
сообщение об ошибке.
/bin/bash
?Я мог бы успешно использовать git-shell непосредственно в файле авторизованных ключах без использования дополнительного скрипта.
Ключ должен добавить
\"
вокруг переменной env.Протестировано в rhel6 openssh-server-5.3p1-70.el6.x86_64:
источник
git-shell
, но это может быть просто паранойя.Решение Grawity можно легко модифицировать для работы, заменив линию
с линией
Кавычки решают проблемы, о которых говорилось выше, и замена exec на git-shell кажется более безопасной.
источник
git-shell
предназначен для использования в качестве оболочки входа в систему, чтобы он мог получать в-c "originalcommand"
качестве аргументов. Этого не происходит с «принудительными командами» в OpenSSH; вместо этого принудительная команда передается в настроенную оболочку.Что вы можете сделать, это написать скрипт, который проверяет
$SSH_ORIGINAL_COMMAND
и выполняет его. Пример в bash :источник
git <cmd>
, не такgit-<cmd>
ли?man git-shell
(git 1.7.3.4): В настоящее время разрешено вызывать только четыре команды: git-receive-pack, git-upload-pack и git-upload-archive с одним обязательным аргументом, или сервер cvs (для вызова git -cvsserver).$SSH_ORIGINAL_COMMAND
тому, что недействительным и вызывающимgit-shell
задницу :-(Я не смог заставить работать решение grawity по той же причине, о которой сообщил Нил Мэйхью (т.е. одинарные кавычки, отправленные git-клиентом, вызвали недействительность
$SSH_ORIGINAL_COMMAND
- я используюgit v1.7.x
)Однако следующее решение, реализованное @moocode, просто работает:
https://moocode.com/posts/6-code-your-own-multi-user-private-git-server-in-5-minutes
Руби FTW! :-)
источник
Для полноты картины , а так как исходный вопрос не указать , что та же учетная запись должна была быть полезной для не GIT вещей, очевидный ответ заключается в использовании ,
git-shell
как он был разработан для использования: установить его в качестве регистрационной оболочки (т.е.usermod
, в/etc/passwd
) для этого пользователя SSH.Если у вас есть одна учетная запись, которую вы хотите использовать двумя способами:
... тогда применяются другие ответы в этой теме. Но если вы можете позволить себе выделить отдельного пользователя для git, то установка его оболочки
git-shell
- это самый простой способ ограничить его, и он немного более безопасен, так как не требует дополнительных сценариев оболочки.источник