我按照本教程在 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 密钥完成的——每个开发人员都会将他们的公钥添加到git
SSH 帐户。
只要记住:
- 在命令中指定协议(即
ssh
、git
或http
)https
。 - 确保防火墙设置正确:
- 通常端口 22
ssh
- 通常端口 443
https
- 另外两个应该避免,但作为参考,端口 9814
git
和端口 80http
- 通常端口 22
答案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。