gitllab访问报错:Permission denied (publickey). 以及后续测试

主要测试了各方式clone的情况:

1. 安装gitlab,配置ip:port。

常规步骤:

yum install -y curl policycoreutils-python openssh-server
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm
rpm -ivh gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm
vim /etc/gitlab/gitlab.rb   #修改nginx['listen_addresses']、nginx['listen_port']、external_url 3项
gitlab-ctl restart
gitlab-ctl reconfigure

然后在gitlab网页端注册账号

2. gitlab注册的账号和linux账号关系,git账号

linux账号和gitlab内账号没有关系。安装完gitlab之后,linux系统会创建一个叫git的账号,之后对project的上传下拉操作都是通过git账号完成。

3. 注册ssh key之后,以及使用ssh clone的过程。访问受linux sshd内ssh认证配置的影响。

在gitlab上注册了ssh key之后,背后实际上gitlab会把注册的key写入git账号的~/.ssh/authorized_keys文件。这样,每次git clone/push/pull操作时,都是先ssh到linux的git账号,再进行后续操作。

因为git的ssh方式会通过sshd服务,所以在linux上修改了sshd配置会影响git的使用。比如修改了ssh端口,则git也需要配置响应端口(很多时候会修改ssh的默认端口,从22改为一个大数字)。

一般情况下,git ssh认证有公钥私钥就可以正常操作。但有的情况下,linux端会开双重认证 AuthenticationMethods publickey,password。这个时候再git clone git@****.git 的时候,会需要输入git账号自身的密码(可以想象成先登录到linux的git账号)。如果想要顺利进行,一般要通过root账号修改下git账号的密码,再通过验证。

4. git ssh clone和http clone的区别。为什么ssh clone不可以,http clone却可以?

git ssh 和 git http是两个相互独立的方式。git ssh通过ssh连接,受linuxsshd配置(git账户)影响;git http直接通过ip:port进行连接,不需要linux账户的信息,只需要在gitlab上注册的账号的用户名和密码。

所以,有时候git ssh不成功时,通过ssh clone可以成功。

5. git http clone 用户密码。全局配置文件~/.gitconfig内的[User].name项的作用。

git http每次都要输账号密码,可以通过 git config credential.helper 相关命令存储账号密码。

此外,在全局配置文件~/.gitconfig内也会有一个

[user]
name = testmm
email = ***

User项。这里的user.name和gitlab账号也是相互独立的。user.name代表的是在你提交commit时,显示的名字。比如,执行git lg:

[ttt1@local transfer]$ git lg
* 67ccd87 - (HEAD, origin/master, origin/HEAD, master) test123 (3 hours ago) <testmm>

这里显示是testmm提交的修改,这不是gitlab内账号的名字,只是本地做的一个全局配置内的名字。

但是在gitlab网页上看到的修改者还是以gitlab内的账号名字出现的。这是个不一样的地方。

 

上一篇:LambdaExpression解析(ExpressionVisitor)


下一篇:KingbaseES图形化安装未弹出界面应该如何处理