SSH远程连接不上linux

问题:ssh一直都可以远程连接上linux,一段时间后突然ssh使用原本的IP连接不上linux,发生这种情况时的解决办法

查看网络配置文件中的IP有没有改变。

先查看IPADDR有没有改变,要是没有被改变,那么继续步骤2;要是发生了改变则将IPADDR改成之前的,然后进行步骤2。

[root@fanycb ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO=none
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="e57636db-84f8-4c15-af74-97d44a107fa2"
HWADDR=00:0C:29:14:5A:57
IPADDR=192.168.1.100
PREFIX=24
GATEWAY=192.168.1.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
[root@fanycb ~]# 

检查sshd服务的状态以及端口是否正常。

  • 查看sshd的22端口是否处于正常的LISTEN状态,如果正常,则进行步骤3;如果不正常,则重新启动sshd服务,然后进行步骤3;

    [root@fanycb ~]# netstat -nlp | grep :22
    tcp    0      0 0.0.0.0:22          0.0.0.0:*         LISTEN     2896/sshd           
    tcp    0      0 :::22                  :::*           LISTEN     2896/sshd  
    [root@fanycb ~]# 
    
  • 重启sshd服务

    [root@fanycb ~]# /etc/init.d/sshd restart
    停止 sshd:                                                [确定]
    正在启动 sshd:                                            [确定]
    [root@fanycb ~]# 
    

如果重启失败

  • 错误提示:--ssh:connect to host centos-py port 22: Connection refused

1)SSH服务未安装

此时,采用在线安装的方式就行下载安装。

命令为:         yum -y install openssh-server;

然后启动ssh服务:    service sshd start。

2)ssh服务对应22号端口未开启

ss -lnt :使用该命令查询22号端口是否开启,如果为下图所示为正常开启,

SSH远程连接不上linux

否则要先开启22号端口。

如果要修改端口,查看或编辑SSH服务配置文件,使用命令 vi /etc/ssh/sshd.config,进入 后把 port 后面默认的22端口改成别的端口即可(注意前面的#号要去掉)。

3)还有一种特殊情况:

以上两点都没有问题,并且执行ssh localhost命令也没有问题,但执行 ssh hostname(hostname为你自己的主机名)命令时出错。(此时,我们可以思考为什么用 localhost没有问题,而用我们的主机名却有问题?注意看下图第一行配置,有个127.0.0.1到localhost的映射;于是,我们可以思考是否是因为我们没有配置IP地址到我们的主机的映射呢?)

出现这种情况就是因为我们没有在hosts文件中进行相应的配置,应该在其中加入hostname与IP地 址的映射关系:

vi /etc/hosts

SSH远程连接不上linux

最后,输入ssh (我的hostname),然后出现了以下内容,表示我们的问题得到了解决。

SSH远程连接不上linux

磁盘文件系统分区导致ssh失败问题

首先检查IP

ifconfig -a

查看ip信息:(通过下图可以看出是没有run起来,连IPV4都没有)

SSH远程连接不上linux

使用指令重启下网络,但是发现还是没有效果:

service network restart

尝试使用以下指令,显示成功(可能在restart时候没有自动起网络成功),同时可以查看到对应的ip地址:

ifup eth0

但是在ssh这个服务器的时候还是ssh失败:

systemctl status sshd.service #显示状态是inactive
systemctl restart sshd.service 

restart之后显示authorization not available. check if polkit service is running,然后google了很久还是没有用。尝试start polkit service也显示失败还会自动reboot主机

最后看到一篇文章说有可能是挂载问题,然后使用blkid进行了以下的排查:

blkid [device]
#blkid
/dev/sda1: UUID="4d2cb34a-032f-409f-99da-8d89f9fc5afa" TYPE="ext4" 
/dev/sda2: UUID="1647f75f-d551-4581-8fe9-5f92fab6ac52" TYPE="ext4" 
/dev/sda3: UUID="14e24232-5281-49e9-ade9-3a16abab637e" TYPE="ext4" 
/dev/sda5: UUID="8b47d79d-6b7c-42d6-872a-d07b668a5a71" TYPE="swap"

然后查看/etc/fstab中挂载信息:

看到blkid和/etc/fstab没有一一对应,因此修改/etc/fstab中的UUID让blkid中和/etc/fstab文件中一一对应.

即修改/home对应的UUID,改完之后。

mount -a
reboot

重启之后成功ssh到服务器。

检查防火墙是否开启。

如果防火墙是关闭的,则进行步骤4;如果防火墙没有关闭,则 永久性的关闭它,然后进行步骤4。

[root@fanycb ~]# chkconfig iptables off            <====永久关闭防火墙
[root@fanycb ~]# /etc/init.d/iptables status         <====然后确认一下是否关闭了
iptables:未运行防火墙
[root@fanycb ~]# 

检查SELinux是否开启。

查看系统SELinux目前的状态

[root@fanycb ~]# getenforce 
Disabled                         <====这是我系统上SELinux的状态,这是关闭的
[root@fanycb ~]#

如果结果也是"disabled",那么一切的检查就ok了,那就可以连接了

可如果结果是"Enforcing"活着"permissive",说明系统上的SELinux是开启的,需要将它关闭。因为SELinux的开启与关闭和两个重要的配置文件有关,分别是/etc/selinux/config和/boot/grub/menu.lst,所以要关闭SELinux就需要修改这两个文件,方法如下所示:

[root@fanycb ~]# cat /etc/selinux/config 

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
#SELINUX=enforcing
SELINUX=disabled                       <====将=号后改为disabled
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted [root@fanycb ~]# cat /boot/grub/menu.lst # grub.conf generated by anaconda## Note that you do not have to rerun grub after making changes to this file# NOTICE:  You have a /boot partition.  This means that#          all kernel and initrd paths are relative to /boot/, eg.#          root (hd0,0)#          kernel /vmlinuz-version ro root=/dev/sda5#          initrd /initrd-[generic-]version.img#boot=/dev/sdadefault=0timeout=5splashimage=(hd0,0)/grub/splash.xpm.gzhiddenmenutitle CentOS (2.6.32-279.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-279.el6.x86_64 ro root=UUID=edc1b124-6bc5-4dbe-b2d4-88805da96d4d rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=128M LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet selinux=0                     <====seliux=0 是添加上去的 initrd /initramfs-2.6.32-279.el6.x86_64.img[root@fanycb ~]# 

SSH远程连接不上linux

上一篇:一个 Linux 服务器上运行多个Tomcat


下一篇:Shell-02-if