1、问题

如何通过ssh免密请求非默认端口的GitLab服务器?

2、背景

给git仓库配置过很多次ssh免密,从来没有出现过问题。但是今天在处理ssh免密登录的时候发现,无论怎么配置ssh,都会连接失败。显示结果如下,探索之后才发现请求的不是默认端口。和我的问题刚好相反?但其实操作是一样的

  1. Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

3、探索

由于旧的机器能正常访问,新的机器不能正常访问,于是使用ssh的debug查看连接明细。一对比发现了问题

使用 ssh -T -v git@gitlab.com(你自己的 gitlab服务器) 查看debug信息

image.png

成功的请求时请求到了22端口,失败的请求时请求到了36000接口

使用 ssh -T git@gitlab.com -p22 测试成功

4、解决问题

本质上要解决的问题是 往目标机器发送ssh请求的时候请求到22端口 ,这样看问题就熟悉多了,就是配置 ~/.ssh/config 文件就行

1、在 ~/.ssh 目录下新增并配置config文件,如果config文件不存在,先添加;存在则直接修改

2、在config文件里添加如下内容:

  1. Host gitlab.com
  2. Port 22

3、直接使用会出现 Bad owner or permissions on $HOME/.ssh/config ,需要更改权限

  1. chmod 600 config

4、验证
执行 ssh -T git@gitlab.com OK,解决问题

5、总结

  1. 经历过最多出现的ssh问题是 ssh "permissions are too open" error ,修改权限 chmod 600 id_rsa 解决问题
  2. ssh的config文件也要修改权限
  3. ssh -v Verbose 模式,打印debug日志,方便查看具体错误原因

6、参考

[1] jackluo.window下 配置gitlab ssh非端口22端口.博客园:博客
[2] real_Daniel.SSH 的详细使用方法.CSDN:博客,2013-06-18日