1、问题
如何通过ssh免密请求非默认端口的GitLab服务器?
2、背景
给git仓库配置过很多次ssh免密,从来没有出现过问题。但是今天在处理ssh免密登录的时候发现,无论怎么配置ssh,都会连接失败。显示结果如下,探索之后才发现请求的不是默认端口。和我的问题刚好相反?但其实操作是一样的
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
3、探索
由于旧的机器能正常访问,新的机器不能正常访问,于是使用ssh的debug查看连接明细。一对比发现了问题
使用 ssh -T -v git@gitlab.com(你自己的 gitlab服务器) 查看debug信息
成功的请求时请求到了22端口,失败的请求时请求到了36000接口
使用 ssh -T git@gitlab.com -p22
测试成功
4、解决问题
本质上要解决的问题是 往目标机器发送ssh请求的时候请求到22端口 ,这样看问题就熟悉多了,就是配置 ~/.ssh/config
文件就行
1、在 ~/.ssh
目录下新增并配置config
文件,如果config
文件不存在,先添加;存在则直接修改
2、在config
文件里添加如下内容:
Host gitlab.com
Port 22
3、直接使用会出现 Bad owner or permissions on $HOME/.ssh/config
,需要更改权限
chmod 600 config
4、验证
执行 ssh -T git@gitlab.com
OK,解决问题
5、总结
- 经历过最多出现的ssh问题是
ssh "permissions are too open" error
,修改权限chmod 600 id_rsa
解决问题 - ssh的config文件也要修改权限
ssh -v
Verbose 模式,打印debug日志,方便查看具体错误原因
6、参考
[1] jackluo.window下 配置gitlab ssh非端口22端口.博客园:博客
[2] real_Daniel.SSH 的详细使用方法.CSDN:博客,2013-06-18日