GitLab使用ssh连接免密登录失败

标签: Git 分类: 软件 创建时间:2020-02-28 13:56:55 更新时间:2024-11-15 10:49:43

gitlab安装成功之后,我在某一个用户下增加了ssh公钥,提交克隆时还是需要密码,但是输入了很多密码,还是不行。

1.尝试的各个方法

gitlab的日志文件在/var/log/gitlab中。

(1)打开/var/log/secure文件,查看登录日志:

(2) 我修改了/etc/security/access.conf,在最后添加了:-:ALL EXCEPT root git:ALL,(gitlab默认创建了git用户),systemctl restart sshd重启sshd,不起作用。

(3)我修改了/etc/ssh/sshd_config,添加了:AllowUsers git,还是不起作用。

(4) 使用:ssh -vvT git@192.168.1.60,测试

(5) 使用git用户登录:su git,然后:ssh-keygen -t rsa -C “your email”生成密钥,失败

(6) 强制解锁密码:sudo passwd -u -f git

然后重新设置git的密码:passwd git,结果不起作用。

(7) 修改/root/.ssh文件夹权限:chmod 700 .ssh/, 失败。(这个慎用,我设置了700,最后xShell无法使用ssh登录了。只能设置为777才重新登录上的。)

弄了很长时间,还是不行,先老老实实用http模式访问,待有空再继续深究。

(8) 我想到了,是不是因为用户名配置的不对呢?gitlab在判断用户权限的时候,是不是使用了git config中的值呢?于是我按照空项目的时候,提示的要创建的全局用户名和邮箱,进行了设置。

结果失败啊。

(9) 修改配置文件/.ssh/config文件(没有,就创建)
创建
/.ssh/config文件

1
2
3
4
5
host 192.168.1.60
user root
hostname 192.168.1.60
Port 22
identityfile ~/.ssh/id_rsa

这个方法也不行。

我突然想到了,为了验证是否是gitlab的问题,我可以先用root用户登录试试。如果配置了公钥,使用root用户可以登录,那么就有可能是gitlab的问题。如果root用户也无法正常登录,则有可能是其他的问题。

经过验证,使用root也无法登录ssh远程电脑。

20200229更新
我在另一台电脑上,添加了ssh的key,然后测试ssh连接,出现了:Someone could be eavesdropping on you right now (man-in-the-middle attack)!It is also possible that a host key has just been changed.The fingerprint for the RSA key sent by the remote host is 错误。

解决方法:删除~/.ssh/known_hosts文件(我这里删除的是c/Users/Administrator/.ssh/known_hosts),或者如果你可以判断出known_hosts中原ssh服务器的公钥,删去那部分。

2.终极解决方案

最后只能进行了重装了(可能是版本问题)。没有什么是重装系统解决不了的问题。如果有,那就买个新电脑吧。因为gitlab-ee也是依赖这个openssh的,所以也会被一同卸载,我的gitlab作为一测试,还没有很多仓库,就干脆卸载了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
## 停止sshd
systemctl stop sshd
## 卸载openssh
yum remove openssh

## 删除配置文件
rm -rf /etc/ssh
## 删除用户配置
rm -rf ~/.ssh

## 安装openssh
yum install openssh-server

## 启动
systemctl start sshd

## 重新生成公钥
ssh-keygen -t rsa -C "邮箱"
## 新建auth

奇怪重装之后,还是不行。

1
2
3
4
5
6
7
8
## 安装网络测试工具netstat
yum install net-tools
## 查看全部端口
netstat -ntlp

## 查看某个端口
netstat -ntlp | grep 80
netstat -anl | grep "80" ;

最后我把我windows上的公钥也重新生成了一遍,结果竟然真的可以登录了。

可喜可贺啊,可喜可贺啊,尝试了这么多方法,最后竟然是因为本机密钥不对所以连接不上,终于算是完成了第一步的工作了。但是同样的,为何在其他的电脑上,也是无法登录呢?

经过卸载openssh和gitlab-ee重新安装,重新安装过程,也是曲折百出,但是最终还是让我解决了(GitLab服务器搭建, 其中的问题汇总。),最终终于解决了ssh无法登录的问题。

我突然有这样的疑问,为何还需要花费如此多的时间,如此执着的解决一个可能并不影响最终结果的问题呢?

3.ssh登录特别慢

主要是因为dns解析的问题。在ssh服务其上编辑/etc/resolv.conf,增加:

1
2
3
search localdomain
nameserver 223.5.5.5
nameserver 8.8.8.8

重启网络

1
systemctl restart network

速度就明显变快了。测试连接时间:

1
time ssh root@192.168.1.60 exit
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。