Gitlab添加ssh-key报500错误处理

Gitlab添加ssh-key报500错误

一、查看日志

发现Errno::Enoent(No such file or derectory -ssh):

复制代码
root@asu1:/home/caixin# tail -f /var/log/gitlab/gitlab-rails/production.log

二、分析

根据日志提示,好像是缺少文件或目录,后面有个ssh,难首是依赖ssh有问题?

根据下面报的文档:popen.rb,key_fingerprint.rb等等,查看这些文件内容,看能否找到原因

复制代码
root@asu1:/home/caixin# find /opt/gitlab/ -name popen.rb
/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/popen.rb
/opt/gitlab/embedded/service/gem/ruby/2.3.0/gems/gitlab_git-10.7.0/lib/gitlab_git/popen.rb
root@asu1:/home/caixin# vim /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/popen.rb

popen.rb这个文件没有帮助,进入这些文件目录

复制代码
root@asu1:/home/caixin# cd /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/

感觉和ssh有关,grep找一找哪些文件有ssh

复制代码
root@asu1:/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab# grep 'ssh' ./*rb
./identifier.rb:        # git push over ssh
./identifier.rb:        identify_using_ssh_key(identifier)
./identifier.rb:    def identify_using_ssh_key(identifier)
./identifier.rb:      identify_with_cache(:ssh_key, key_id) do
./identifier.rb:        User.find_by_ssh_key_id(key_id)
./identifier.rb:        ssh_key: {}
./key_fingerprint.rb:        cmd.push('ssh-keygen')
./key_fingerprint.rb:      version_output, version_status = popen(%w(ssh -V))
./url_sanitizer.rb:      regexp = URI::Parser.new.make_regexp(['http', 'https', 'ssh', 'git'])
root@asu1:/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab# 

发现有一个ssh -v,可能问题在这里,打开个文件看看,原因需要通过Ssh -v来执行

复制代码
root@asu1:/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab# vim key_fingerprint.rb

单独执行一下ssh -v看看,发现执行不了,报错了,原因找到了。继续查找发现ssh文件都不存在,丢失了,原来问题出现在这里。服务器曾经出现文件系统损坏,导致无法进入linux,最后通过fsck修复了linux,有可能在这个步骤把ssh相关文件弄丢了。

那就安装一下openssh-client吧,结果发现也安装不了。如果删除重新安装,发现删除的时候会把git等相关依赖都删除,这样操作就弄大了,不能安装,也不能删除,只能看看如何修复。

三、解决:

由于是vm虚拟机,先做个快照,再把虚拟机还原到以前的快照,找到ssh相关文件,把/usr/bin/下的ssh相关所有文件都拷贝出来,然后虚拟机再还原来回来,把拷贝出来的文件按相同路径拷贝过去,

切记要把拷贝进来的文件授权,加上可执行权限。这样问题就解决了。

相关推荐
上海云盾第一敬业销售35 分钟前
服务器遭受攻击的应对策略及快速防护实践
运维·服务器·web安全·ddos
剑神一笑6 小时前
Linux pgrep 命令详解:按名称查找进程 PID 的高效方法
linux·运维·chrome
Lumbrologist6 小时前
【零基础部署】Docker 部署 CrewAI 多 Agent 编排框架保姆级教程
运维·docker·容器
yyuuuzz6 小时前
独立站的技术基础与常见运维问题
大数据·运维·服务器·网络·数据库·aws
剑神一笑6 小时前
Linux killall 命令详解:按进程名批量终止进程的原理与实践
linux·运维·chrome
雅菲奥朗6 小时前
企业级 AI 自动化|OpenClaw 龙虾实战与认证
运维·人工智能·自动化·openclaw
江华森8 小时前
Ansible 自动化运维:从入门到实战
运维·自动化·ansible
宋浮檀s10 小时前
应急响应——Web漏洞:命令执行+SSRF+弱口令
运维·数据库·sql·网络安全·oracle·应急响应
日取其半万世不竭10 小时前
iftop、nethogs 和 nload:Linux 服务器网络流量实时监控工具介绍
linux·运维·服务器
mounter62511 小时前
Linux 内核资源管理:控制组(cgroup)的演进与“策略组”新提案
linux·运维·服务器·cgroup·kernel