前言
我们的服务器一开始是可以被远程连接的,但是当我们的服务器因为某些原因而发生重启,我们在这之后,再对它执行远程连接的时候,经常会发生无法远程的情况。下面介绍的就是,解决这个问题的方法。
ssh报错解决方法,请参考下列链接:
https://blog.csdn.net/gx_1_11_real/article/details/80423409
原因
【1】被重启的服务器的ip未设为静态,服务器重启后IP自动获取,地址发生改变。
【2】执行远程的本机的ssh或防火墙等原因,导致无法远程
【3】服务器重启后,防火墙的设置恢复最初的规则
【4】服务器重启后,ssh服务未启动或配置错误
【5】密钥文件发生错误
排查的过程
【1】确定是否是本地的问题,即执行远程的主机的问题
<1>测试本机的网络及配置是否正常
ping 远程的IP
ssh 其他远程的服务器
如可连接其他的服务器和ping通远程的IP,证明非本地的原因
【2】确认是否重启服务器的问题
<1>测试重启服务器的网络是否正常
ping 重启服务器的ip
如可ping通重启服务器的IP,证明服务器重启后ip未改变,且网络的联通性无问题
<2>测试重启服务器的端口及远程服务是否正常
ssh 重启服务器的ip
nmap 重启服务器的ip 端口 (例如:nmap 10.10.20.208 22)
(可使用其他端口扫描工具,扫描重启服务器的22端口,telnet、ss、netstat…)
如果测试端口有问题,证明该端口服务未启动或被防火墙禁用
解决方法
【1】去本地登陆重启服务器修改防火墙
<1>查看防火墙是否运行及其规则
service iptables status(centos6)
systemctl status firewalld(centos7)
如防火墙未启动,查看ssh服务
如防火墙启动,就查看规则,并根据情况更改;如无需防火墙,就进行关闭
iptables
-
iptables -nvL 查看防火墙规则
iptables -F/-X/-Z 清除已有iptables规则 -
iptables -A INPUT -p tcp --dport 22 -j ACCEPT 放行22端口(临时性,无需重启服务)
-
echo “-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT” >> /etc/sysconfig/iptables
service iptables restart 放行22端口(永久性,需重启服务)
firewall
-
firewall-cmd–zone=public --list-ports 查看所有打开的端口
-
firewall-cmd --zone=public --add-port=22/tcp --permanent 放行22端口(永久性,无重启服务)
firewall-cmd --reload 更新防火墙规则 -
firewall-cmd --permanent --add-service=sshd 放行ssh服务(永久性,无需重启服务)
firewall-cmd --reload 更新防火墙规则
关闭防火墙
-
service iptables stop
chkconfig iptables off 开机不自启 (on为开机自启) -
systmectl stop firewalld
systemctl disable firewalld 开机不自启
【2】去本地登陆重启服务器进行重启服务
<1>查看ssh 服务是否启动
service sshd status (centos6)
systemctl status sshd(centos7)
如未启动或启动后无进程,查看ssh的配置文件后,重启ssh服务
service sshd restart(centos6)
systemctl restart sshd(centos7)
启动后无进程,或端口丢失,查看ssh的配置文件后,重启ssh服务
【3】去本地登陆重启服务器删除密钥文件并重新推公钥
<1>删除远程的主机ip的在known_hosts相关信息
vim /.ssh/known_hosts
<2>从远程的主机向重启的服务器推公钥(单向即可)
远程的主机操作
ssh-copy-id 重启的服务器的ip
补充
由于近期才看到有个读者,发了评论说:"碰到一个奇怪的事,有时重启远程服务器可以,有时重启后又没法远程连接。"我本来想着回复到评论里算了,结果好像评论没审核通过什么的,干脆补充到这了。
<1>首先排查自己这边网络是否有问题,然后查看服务器系统日志,看是否有报错,有没有内存溢出。
<2>查看计划任务和服务的日志。有时候有些服务器中计划任务或某些服务有异常,会导致重启服务器没过多久又会报内存溢出,挖矿病毒那种也会导致;如果是有些连上一会儿又断开的,观察一下哪个服务的负载或内存占用异常,查看与这台服务器相关的nginx或其他web服务的日志。
<3>对于服务上或者病毒引起的问题,云服务器可以尝试更换实例,实体机可以重装系统通常可以解决问题。注意要先备份服务或有冗余才能这样。
<4>如果重装系统仍没有解决,迁移回服务又异常了,查看系统和服务的最大连接数,尤其的基于k8s的服务。
<5>如果不是服务的问题,看服务器是云还是实体机。
云的话发工单让云平台的人排查问题(他们会排查防火墙配置?本地网络?该实例的网络配置?等)
实体机就看下启动时和启动后,是否有硬件方面的提示或报错、排查网卡是否异常、光纤或网线是否老化、内存是否损坏、硬盘或Raid岌岌可危、电源或者服务器是否异常漏电、也可能是交换机老化。如果某台频繁发生也可能是计划报废(谁都没证据),要不就是修的多了哪根线有问题了?这种如果不能保修,只能认定为高危,不适合作为部署重要服务的机器了。如果怀疑漏电静电之类导致的,给服务器搬迁机柜和换电源。