前言
我们的服务器一开始是可以被远程连接的,但是当我们的服务器因为某些原因而发生重启,我们在这之后,再对它执行远程连接的时候,经常会发生无法远程的情况。下面介绍的就是,解决这个问题的方法。
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