看日志,看日志,看日志
重要的事情说三遍

我自己搭的gitlab,生成了ssh,已经在后台设置好了
以前都是好的,不需要输入密码直接clone

IDE集成的git,突然有一天push不了了

单独的git命令,提示要输入密码

debug1: Next authentication method: password
 git@git.xxxx.com's password:

==========
解决方法:

方法1:查看客户端的登录日志

ssh -vvvT git@git.xxxx.com
查看详细的ssh登录日志

解决:客户端的问题,能查到
缺点:服务器端的问题不能查到

方法2:查看服务器的登录日志

服务器:
/usr/sbin/sshd -d -p 8003
打开一个sshd的调试模式

客户端:
ssh -vT git@git.xxxx.com -p 8003

查看服务器上的日志信息
找到对应的错误,解决
参考:https://blog.codefront.net/2007/02/28/debugging-ssh-public-key-authentication-problems

方法3:查看服务器的ssh日志

系统:ubuntu14.04
日志:/var/log/auth.log
查看:tail -f /var/log/auth.log
每个系统位置名称不一样,系统版本会有问题
搜:xxxx(系统 版本号) ssh登录日志
如:ubuntu14.04 ssh登录日志

(PS:我这一步,阿里云ECS有问题,系统没有auth.log,怎么打也打不开,我是开工单,做快照,阿里专家才弄好)

方法4:查看gitlab的日志

查看配置
sudo gitlab-rake gitlab:check
查看日志
sudo gitlab-ctl tail
 

==========
解决过程:

经过baidu,google,stackoverflow,各种找,大概的报错和解决方案如下:

方案1:gitlab的ssh没有配置

这个问题在我这不存在,因为以前都是配置好了的,而且一直在用
没有配置的按这个

方案2:gitlab的系统用户git锁住了

说是git用户锁住了,需要重置密码,然后就能登录进去了
passwd git
重置密码:123456

然后在
'git@git.xxxx.com's password:
输入123456

能登录进去了,但进入的是系统的ssh
登录到了系统的命令行

直接用命令
git clone git@git@git.xxxx.com:testuser/project1.git

提示:

fatal: '/testuser/project1.git' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

这个没有找到仓库

网上解决方案:

用仓库的绝对目录
git clone git@git@git.xxxx.com:/var/opt/gitlab/git-data/repositories/testuser/project1.git

可以用设置的git的密码clone了

但:
1:不能兼容以前的项目
2:每次要输入密码

问题没有解决

方案3:gitlab的.ssh目录权限和ssh文件权限的问题

/var/opt/gitlab/.ssh/authorized_keys

因为安全问题
不能是755

资料上说:
.ssh:目录权限要是700
authorized_keys:目录权限要是600

但最终我用的是
.ssh:目录权限要是744
authorized_keys:目录权限要是644

也是可以的

方案4:gitlab的端口冲突

修改gitlab的端口
文件:/etc/gitlab/gitlab.rb
修改
gitlab_rails['gitlab_shell_ssh_port'] = 8002

重新编译
sudo gitlab-ctl reconfigure

注意:记得ssh的配置也需要添加端口,才能访问,要不然会报

debug1: connect to address xxx.xxx.xxx.xxx port 8002: Connection refused
ssh: connect to host git.xxxx.com port 8002: Bad file number

文件:/etc/ssh/sshd_config

Port 22
的后面添加
Port 8002

重启ssh
/etc/init.d/ssh restart

测试后,也是一样,是登录到系统的ssh,不是登录到gitlab

 

==========

还有几种可能,如:sshd_config中添加AllowUsers git,都试过,都不行

==========

最终解决方案,见前面的,按日志查询,一步一步解决
 

==========

经过一系列的折腾后
根据日志,我出现的问题:

1:ssh没有找到对应的authorized_keys

配置文件
/etc/ssh/sshd_config
取消注释:
AuthorizedKeysFile    %H/.ssh/authorized_keys
修改为:
AuthorizedKeysFile    /var/opt/gitlab/.ssh/authorized_keys

2:报找不到publickey

Failed publickey for git from xxx port xxx ssh2: RSA xx:xx:xx:xx:xx...

1:删除本地除id_rsa和id_rsa.pub
2:删除服务器gitlab的SSHKeys

按日志排除所有的错误后

就能看到正常的

$ ssh  git@git.xxxx.com
Welcome to GitLab, testuser!
Connection to git.xxxx.com closed.

 

==========
gitlab常用命令

服务相关
    状态
    sudo gitlab-ctl status
    重启
    sudo gitlab-ctl restart
    开始
    sudo gitlab-ctl start
    停止
    sudo gitlab-ctl stop

官方SSH帮助
https://docs.gitlab.com/ee/ssh/

 

==========
总结:
1:git@git.xxxx.com是系统用户git登录,输入密码是系统用户git的密码,不是开发者ssh证书的密码
2:gitlab的ssh登录,是通过系统的ssh功能登录实现
3:gitlab将所有开发者在后台SSHKey都保存在gitlab的authorized_keys文件中
4:gitlab的ssh关联,可通过配置指定:authorized_keys的位置登录
5:ssh在登录时,会找系统的配置文件+关联配置文件登录
 

==========
希望能帮助你彻底解决gitlab的ssh登录问题
如果有用,请留言5星好评