如何设置安全的 Git 存储库?

如何设置安全的 Git 存储库?

我按照本教程在 EC2 实例上设置了一个 git 存储库。 http://git-scm.com/book/ch4-4.html。基本上,我添加一个新git用户并将我的公钥包含在authorized_keys中。设置用户后git,我只需通过初始化一个新的存储库即可git init --bare

但是,我注意到我可以轻松克隆它而不需要我的私钥。有没有办法强制它只能通过 SSH 访问,以便遵循 authorized_keys?我猜它使用的是 git 的默认端口 9418,似乎不支持身份验证。

答案1

端口 9814 是git-daemon运行(例如 clone、git clone git://git.example.com/repo)的地方。这用于内部git存储库。阅读文档更多细节。

您有另外两个设置远程git服务器的选项:

  • SSH 服务器:git clone ssh://git.example.com/git/repo
  • HTTP 服务器git clone https://git.example.com/git/repo

SSH 的设置要容易得多。您只需确保所有贡献者都可以访问 SSH 帐户。这通常是通过 SSH 密钥完成的——每个开发人员都会将他们的公钥添加到gitSSH 帐户。

只要记住:

  • 在命令中指定协议(即sshgithttphttps
  • 确保防火墙设置正确:
    • 通常端口 22ssh
    • 通常端口 443https
    • 另外两个应该避免,但作为参考,端口 9814git和端口 80http

答案2

您似乎假设 git-daemon 是负责的。您是否已确认 git-daemon 确实在系统上运行?检查进程列表以及开放端口列表:

$ ps auxwww | grep git-daemon
$ sudo netstat -ptuna | grep 9814

如果 git-daemon 没有运行,并且没有任何程序在端口 9814 上监听,则可能有其他问题 —— 也许您添加的新 git 用户没有设置密码,或者 SSH 配置使用 Kerberos 并且您有一个现有的有效服务票证。

HTTP 和 SSH 只是 git 支持的六种协议中的两种。我相信 git 只使用带有 user@host 格式 URL 的 SSH,所以我很确定这是你的 git 用户的身份验证问题。

克隆 repo 时,请查看系统上的 auth 日志(通常为 /var/log/auth.log 或 /var/log/secure)。如果在克隆操作期间看到 git 用户的 SSH 登录,则几乎可以肯定使用的是 SSH,而不是 git-daemon。

相关内容