我的服务器上有一个git repo,我可以通过SSH推送/拉取,就像:
git clone ssh://user@domain.com/repositories/myrepo.git
它提示我使用我的公钥密码,我可以获取或推送更改,但我想知道是否有一种方法可以设置它,以便人们只能clone
读访问权限,因此他们不必输入任何SSH凭据。
提前致谢!
答案 0 :(得分:4)
不通过ssh;除非你想分发公众,否则他们可以登录,这是一个糟糕的主意。
我们在gitolite上获得此功能的方式是使用git-daemon;您需要打开一个新端口,但可以为每个存储库指定它将服务的端口,并且可以指定只读。用户将使用git协议进行克隆,即
git clone git://domain.com/repositories/myrepo.git
另一种方法是将存储库设置为直接通过Web服务器共享;然后用户可以访问标准的http。
git社区书籍here上的页面是一个很好的概述,以及git-daemon
的手册页。
答案 1 :(得分:1)
您可以使用git-daemon
。这将消除对拥有有效ssh凭证的依赖。
答案 2 :(得分:1)
您可以使用git-shell,仅对存储库设置读取权限,并使用密钥身份验证。当您控制谁获得密钥时,这是可行的。
答案 3 :(得分:0)
鉴于:
git clone ssh://remote/src/proj1
和后续的 git pull
/ git fetch
执行 git-upload-pack 'src/proj1'
(带引号)git push
等在远程服务器上执行 git-receive-pack 'src/proj1'
在您的 ~/.ssh/authorized_keys
中,您可以设置一行以:
command="/home/yourusername/bin/checker" ssh-…
其中 ... 部分是您将提供给用户的 SSH 私钥的公钥。
/home/yourusername/bin/checker
可以是一个 shell 脚本:
case $SSH_ORIGINAL_COMMAND in
(git-upload-pack*)
# run git-upload-pack after unquoting its argument, optionally further restricting
# access to specific directories
;;
(git-receive-pack*)
exit 1 # deny access
;;
(*)
exit 1 # allow nothing else
;;
esac
请检查 authorized_keys man page 以获取额外的安全选项,例如 no-port-forwarding
,您很可能希望将其包含在 command="…"
文件中的 authorized_keys
选项中。