acp*_*acp 4 git ssh repository
我是一个试图开始编写项目代码的小团队的一员.我已经决定是时候给git一个机会了(不再是svn)并试图看看我们是否可以使用我们的共享虚拟主机在那里部署一个"公共"存储库,以便我们可以轻松地推送/拉出它和及时了解彼此的变化.
我现在遇到的问题是我们只有一个ssh帐户用于托管.在过去使用过svn之后,我可以在给定的一对ssh密钥上强制执行svn用户名,但是我似乎无法用git做类似的事情(换句话说,将ssh密钥对绑定到特定的dev).我不介意每个人都有读/写权限,因为任何私有都应该留在彼此的机器上.最后,不能使用诸如gitosis的解决方案.
我想我的问题是如何对git推送负责?它是否与正在使用的ssh帐户或git config中给出的电子邮件地址相关联?我可以为每个开发人员创建不同的ssh密钥(对于相同的ssh帐户),然后将它们发送给开发人员吗?
通常你有一个git用户,每个人都使用它来提交,并且他们在服务器上有ssh密钥,这样你就可以登录.我使用gitolite来管理我的git存储库.但是,您只需使用ssh访问即可.
登录您的webhost为您的项目创建一个文件夹.然后让开发人员创建rsa公钥,将它们复制到webhost的主文件夹中.将它们复制到〜/ .ssh/authorized_keys中.现在,您的所有开发人员都能够进入该计算机.现在你让他们做git pull webhostUsername @ somehost:project.git
设置空目录的示例:
ssh user@host.com
mkdir someProject.git
cd someProject.git
git init --bare
cd ~
git clone user@host:someProject.git test
cd test
touch README
git add README
git commit -m "added readme"
git push
Run Code Online (Sandbox Code Playgroud)
将开发人员添加到该帐户
scp someuser_id.pub user@host.com:
ssh user@host.com
cat someuser_if.pub >> ~/.ssh/authorized_keys
Run Code Online (Sandbox Code Playgroud)
现在,创建该公钥的人将能够连接到您的服务器.
每个使用git的人都必须提供用户名和电子邮件.这就是你如何跟踪谁在使用它.您用来推送的用户仅用于通信.
我们遇到了类似的问题:一台带有git克隆仓库的服务器和一台用于使用SSH密钥连接的开发人员.我们的问题是我们需要从这个服务器推送到Github的确切提交者.
git config可能.bascrc在登录时运行可能无法帮助,因为这会在SSH启用用户的主目录中设置(user.name和user.email)设置,因此设置所有开发人员连接.因此,建立连接的最后一个会覆盖另一个dev刚刚设置的设置.
我发现这篇文章你可能还需要关于携带你的Git设置.这是关于设置变量:
GIT_AUTHOR_NAME="Developer Name"
GIT_AUTHOR_EMAIL=foo@example.org
GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME"
GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL"
Run Code Online (Sandbox Code Playgroud)
在开发者机器上,让SSH将它们转发到服务器,如尖头文章所述.
但无论如何,开发人员必须受到信任,因为他们总是可以欺骗这些设置.
acp*_*acp -1
作为更新,我最终使用我在某处找到的自定义 gitserve 脚本执行了上述操作(抱歉不再有链接):
#!/usr/bin/env ruby
# user and permissions are passed from authorized_keys
user = ARGV[0]
permissions = ARGV[1]
command = ENV['SSH_ORIGINAL_COMMAND']
abort unless user and permissions and command
# check the supplied command contains a valid git action
valid_actions = ['git-receive-pack', 'git-upload-pack']
action = command.split[0]
abort unless valid_actions.include? action
# check the permissions for this user
abort "read denied for #{user}" unless permissions =~ /r/
abort "write denied for #{user}" if action == 'git-receive-pack' and permissions !~ /w/
STDERR.write "user #{user} authorized\n"
# user made a valid request so handing over to git-shell
Kernel.exec 'git', 'shell', '-c', command
Run Code Online (Sandbox Code Playgroud)
我的 .authorized_keys 文件包含这样开头的条目:
command="/path/to/custom/script <username> <permissions>",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa ...
Run Code Online (Sandbox Code Playgroud)
其中权限 = r、w 或 rw。感谢大家的评论!
| 归档时间: |
|
| 查看次数: |
5234 次 |
| 最近记录: |