我刚刚安装了GitLab。
我创建了一个项目,名为project-x。
我创建了几个用户,并将其分配给该项目。
现在我尝试克隆:
git clone git@192.168.0.108:project-x.git
它提示我输入密码。
我应该使用什么密码?
与当前场景不严格相关。有时候当您被要求输入密码时,是因为您添加了错误的起源格式(HTTPS而不是SSH)
HTTP(S)协议通常用于具有强用户名和密码的公共存储库
SSH身份验证更常用于内部项目,您可以通过ssh密钥文件和简单密码短语进行身份验证。
GitLab用户更可能使用 SSH 协议
使用以下操作查看远程信息
git remote -v
如果你看到 HTTP(S) 地址,这是将其改为SSH的命令:git remote set-url origin git@gitlab.my_domain.com/example-project.git
它提示我输入密码。
这不应该出现。
如果你有代表已被授权访问project-x
的用户的正确公钥/私钥,那么GitLab就不会要求你输入任何内容。
但这假设首先ssh -vT git@192.168.0.108
是有效的。
从https://github.com/gitlabhq/gitlab-shell/issues/46中得到的解决方案对我很有效。
通过设置权限:
chmod 700 /home/git/.ssh
chmod 600 /home/git/.ssh/authorized_keys
密码提示框消失了。
/home/git/.ssh/authorized_keys.lock
文件。删除这个文件后,一切都正常工作了。 - Shumin GuoAllowGroups
(对于Debian为/etc/ssh/sshd_config
)中包括"git"组。如果没有,请将其添加并重新启动sshd (systemctl restart ssh
)。ssh -vT git@192.168.8.2
进行测试。为了增加另一个原因到列表中...在我的情况下,我发现这个问题是由服务器上的SELinux权限问题引起的。如果您的服务器正在运行Fedora/CentOS/Red Hat,则值得检查。要测试此方案,您可以运行:
客户端:ssh -vT git@<gitlab-server>
— 请求密码
服务器:sudo setenforce 0
客户端:ssh -vT git@<gitlab-server>
— 成功
服务器:sudo setenforce 1
在我这里,gitlab/git用户的authorized_keys
文件具有错误的SELinux文件上下文,并且ssh服务被拒绝读取它的权限。我在服务器端按如下方式解决了这个问题:
sudo semanage fcontext -a -t ssh_home_t /gitlab/.ssh/
sudo semanage fcontext -a -t ssh_home_t /gitlab/.ssh/authorized_keys
sudo restorecon -F -Rv /gitlab/.ssh/
我随后在客户端成功地执行了 git clone
。
gitlab.example.com
的记录指向我的负载均衡器。所以当我尝试使用命令ssh git@gitlab.example.com
时,实际上连接到了错误的机器。~/.ssh/config
文件中添加了一条记录:Host gitlab.example.com
Hostname 192.168.1.50
浪费了很多时间...
当我使用4096位的密钥时,遇到了同样的问题:
$ ssh-keygen -t rsa -C "GitLab" -b 4096
$ ssh -vT git@gitlabhost
...
debug1: Offering public key: /home/user/.ssh/id_rsa
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /home/user/.ssh/id_dsa
debug1: Trying private key: /home/user/.ssh/id_ecdsa
debug1: Next authentication method: password
git@gitlabhost's password:
连接被主机关闭
但是,使用2048位的密钥(默认大小),在将新公钥添加到用户的gitlab ssh密钥后,ssh会连接到gitlab而无需提示输入密码:
$ ssh-keygen -t rsa -C "GitLab"
$ ssh -vT git@gitlabhost
欢迎来到GitLab,Joe User!
Host {a}
User git
Hostname {a-b.domain}
IdentityFile C:/Users/{username}/.ssh/id_rsa
而当您拥有形式的远程时
origin git@a-b.domain:repo-name.git
将URL更改为使用以下表单
git remote set-url origin git@a:repo-name.git
id_rsa
和id_rsa.pub
。使用这些名称生成密钥解决了问题,并且我实际上是在查看ssh -vT my_gitlab_address
的输出时发现的。奇怪的事实是:它在一个装有Ubuntu的计算机上运行良好,但在其他安装不同发行版和旧版本OpenSSH的计算机上却无法正常工作。我有正确的公钥/私钥,但似乎无效(出现相同错误,提示输入git用户密码)。重新启动电脑后就正常了!