我有一台服务器,git
上面运行着一台服务器。
我希望 git 用户能够使用他们的 linux 用户名和密码进行克隆、推送和拉取,但不能登录到 linux 控制台。
如果我使用 锁定他们的帐户passwd -l
,他们将无法再登录 Linux 控制台,但也会锁定他们对git
.
如果我将他们的默认 shell 更改为/bin/false
git 说,Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
当我尝试使用他们的凭据登录服务器时,putty 就会崩溃。
任何想法 ?谢谢。
答案1
有一个git-shell
针对这种情况的命令。看man git-shell
了解详情。
设置方法如下:
chsh -s /usr/bin/git-shell username
假设有~username/testrepo/.git/
一个 git 克隆就可以正常工作:
git clone username@host:testrepo
Cloning into 'testrepo'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
Checking connectivity... done.
在 上ssh username@host
,你会看到
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
并且连接将被终止。
可以创建一个~username/git-shell-commands/
包含脚本的目录,但我无法让它与 一起工作git clone
,因为脚本总是运行,产生输出,破坏 git 存储库操作。因此,最好不要创建该目录。
这是另一种方法(基于 GitLab 的做法)。让一个git
用户拥有所有存储库。它将包含所有主机密钥~git/.ssh/authorized_keys
。每行都带有选项前缀,如下所示。
command="~/bin/gitshell.sh",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB34234234.....
我们不能gitlab-shell
在这里使用,所以我们使用自定义脚本~git/bin/gitshell.sh
:
#!/bin/sh
exec git-shell -c "$SSH_ORIGINAL_COMMAND"
这种方法不需要,chsh
因为 in 的命令authorized_keys
优先。
答案2
我相信你应该限制用户的sshd_config
级别,例如:
Match User git # or Group git-group
ForceCommand git-shell
答案3
尝试/sbin/nologin
一下/etc/passwd
,用户可以执行。