centos 7 xshell 突然连接不上 linux ssh sshd 的问题

测试服务器是centos 7 ,上午开发人员说可以连,下午就不能连了,测试人员在此机器上安装了 jenkins,询问得知,是通过 wget 方式 默认安装的,好吧,大概知道是什么情况了,预计是在安装jenkins时 某些目录的属主权限变了。

  • ping ip

在window 电脑上 ping IP ,如果不通,多半是服务器网络连接问题 或 网卡配置问题

  • 在window 电脑上 telnet ip 22
  • 如果不通,到 centos 上 使用命令

netstat -antulp | grep ssh

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN

tcp6 0 0 :::22 :::* LISTEN

如果没有上面的显示,说明 22 端口监听没有启动

  • 检查 sshd 服务是否已经开启,输入ps -e | grep sshd

# systemctl list-unit-files | grep ssh

  • 启动sshd,ssh 使用的是 22 端口监听

启动命令

systemctl restart sshd

systemctl restart sshd.service

通常是启动不了的,因为有错误,才造成ssh突然断连

  • 查看sshd 状态 : systemctl status sshd

正常是这样的:

[root@bogon ~]# systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since 五 2018-06-22 18:40:43 CST; 6 days ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 8632 (sshd)
Memory: 6.6M
CGroup: /system.slice/sshd.service
└─8632 /usr/sbin/sshd -D
6月 29 13:45:00 bogon sshd[24187]: Accepted password for root from 192.168.1.17 port 60180 ssh2
6月 29 14:18:06 bogon sshd[28789]: Accepted password for root from 192.168.1.160 port 59785 ssh2
Hint: Some lines were ellipsized, use -l to show in full.

不正常的情况下,查看ssh状态多半是报错的,下面是几种报错情况:

  • 有的错误是某些目录或文件无法加载,更改以下这些目录文件的权限就好了 chmod 700 目录路径

  • chmod 600 ~/.ssh/authorized_keys

  • 提示Could not load host key: /etc/ssh/ssh_host_rsa_key 运行下面命令:

    root@bt:/etc/ssh# ssh-keygen -t rsa -b 2048 -f /etc/ssh/ssh_host_rsakey Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): #直接回车即可 Enter same passphrase again: Your identification has been saved in /etc/ssh/ssh_host_rsakey.
    Your public key has been saved in /etc/ssh/ssh_host_rsa_key.pub.
    The key fingerprint is:
    3b:a4:b8:df:a9:15:d1:62:df:d5:d1:41:50:59:4a:96 root@bt
    The key's randomart image is:
    +--[ RSA 2048]----+
    | .***|
    +-----------------+

  • ssh 相关的目录有三个,可能不止这三个,保证这些目录权限正确
[root@bogon ~]# cd  /etc/ssh
[root@bogon ssh]# ll
总用量 276
-rwx------. 1 root root     242153 11月 20 2015 moduli
-rwx------. 1 root root       2208 11月 20 2015 ssh_config
-rwx------. 1 root root       4358 6月  22 18:40 sshd_config
-rwx------. 1 root ssh_keys    227 3月  26 12:15 ssh_host_ecdsa_key
-rwx------. 1 root root        162 3月  26 12:15 ssh_host_ecdsa_key.pub
-rwx------. 1 root ssh_keys    387 3月  26 12:15 ssh_host_ed25519_key
-rwx------. 1 root root         82 3月  26 12:15 ssh_host_ed25519_key.pub
-rwx------. 1 root ssh_keys   1675 3月  26 12:15 ssh_host_rsa_key
-rwx------. 1 root root        382 3月  26 12:15 ssh_host_rsa_key.pub
检查systemctl的日志

less /var/log/messages

Dec 25 10:09:45 localhost sshd: /var/empty/sshd must be owned by root and not group or world-writable.
Dec 25 10:09:45 localhost systemd: sshd.service: main process exited, code=exited, status=255/n/a
Dec 25 10:09:45 localhost systemd: Unit sshd.service entered failed state.
Dec 25 10:09:45 localhost systemd: sshd.service failed.


我看到了以下信息,知道为什么了,说明这个/var/empty/sshd 的文件权限被人改成了所有人可写的状态或者文件所有者被人改成了非root

ls -l /var/empty

发现确实权限是777, 所以修改文件夹权限744,然后启动sshd

chmod -R 744 /var/empty/sshd

systemctl start sshd.service
cd /usr/sbin

设置文件夹~/.ssh的访问权限:

$ cd ~
$ chmod 700 .ssh                                                                                                
$ chmod 600 .ssh/*                                                                                              
$ ls -la .ssh                                                                                                   
total 16
drwx------. 2 root root   58 May 15 00:23 .
dr-xr-x---. 8 root root 4096 May 15 00:26 ..
-rw-------. 1 root root  403 May 15 00:22 authorized_keys
-rw-------. 1 root root 1766 May 15 00:21 id_rsa
-rw-------. 1 root root  403 May 15 00:21 id_rsa.pub
  •  /etc/ssh/  目录下的sshd服务配置文件 sshd_config

如果是突然连接不上ssh,不建议更改sshd_config 配置文件,因为这些配置都没变,曾经都是好使的

———————————下面是一些其他功能,可参考———————————

CentOS7(linux)中ssh服务配置

我采用的是Vmware安装的CentOS7系统.
一、首先确认系统中是否安装了ssh服务
一般来说,CentOS7系统会自带ssh服务,不需要安装,当然我们还是要检查一下系统是否安装ssh服务,命令如下:

    rpm -qa |grep ssh

如果系统已经有ssh服务结果如下:

二、如果系统中不存在ssh服务
ssh安装命令如下:

  yum install ssh

三、配置sshd_config
ssd_config是sshd服务的配置文件,可在其中配置参数,登陆用户等,文件位置位于/etc/ssh/sshd_config,这里可以直接通过vi(不会vi编辑的自己查)命令打开文件进行主要参数的配置(把对应参数前面的警号去掉就可以了):
1、Port 22,sshd服务的端口
2、Protocol 2,也就是外部连接的协议用ssh2,当然如果不设置也可。
3、PermitRootLogin no/yes,如果允许使用root登陆则设为yes,否则为no
4、PasswordAuthentication no/yes,no为不允许使用密码登陆,yes为允许使用密码登陆,一般如果用自己账户登录都用密码,所以这一项最好设为yes,否则会导致window中能ping通linux系统,但是ssh连接不上。
设置好后保存退出。
注:需要的vi命令如下:

vi /ect/ssh/sshd_config  //打开文件
按i键 //进入vi编辑模式,能够更改文件
esc  //编辑完文件后按esc退出编辑模式
shift+: //可以输入退出命令
q! //退出不保存
wq //退出并保存

四、启动/重启ssh服务
启动命令为:

/bin/systemctl restart sshd.service //这是我用的重启命令
/bin/systemctl start sshd.service //这是我用的启动命令

service sshd restart //这个是网上其他人说的,我试了一下不行
service sshd start //这个是网上其他人说的,我试了一下不行

设置开机自动启动ssh服务

systemctl enable sshd.service

五、启动以后查看是否打开了服务
查看服务命令为:

netstat -antup|grep ssh
  • 1

启动成功后结果如下,一般我们外部连接都是tcp协议的,可以看到我们当前能连接的用户、连接地址和端口号。

六、配置防火墙
由于CentOS7防火墙默认的是firewall,网上许多人说改成iptables(如果是用iptables的自己配置)。
首先,我们查看ssh所用的端口是否已经打开,这里我已22端口为例:

firewall-cmd --state //查看防火墙是否打开,打开为running
firewall-cmd --zone=public --query-port=22/tcp //端口如果开放则为yes,否则为no

如果22端口没有开放,我们可以用以下两种方法解决:
1、关闭防火墙:/bin/systemctl stop firewalld.service
2、开放22端口:

firewall-cmd --zone=public --add-port=22/tcp --permanent   //添加(--permanent永久生效,没有此参数重启后失效)
firewall-cmd --reload //添加完成后要重新载入
firewall-cmd --zone= public --query-port=22/tcp //查看

七、外部用secureCRT连接
这里我们用SecureCRT连接,当然自己可以选择shell或者putty等软件,
连接时需要注意,虚拟机装的Linux系统,如果是本机以外的电脑要连接的话需要配置实际的物理地址(当然只用本机连接不需要),配置实际物理地址只需要把虚拟机设置里的网络适配器改为桥接模式,然后重启即可。
八、总结
虚拟机的Linux系统ssh服务连接总的来说4个关键点:1、ssh服务是否启动,2、防火墙是否开放端口,3、是否又实际的物理网址。4、sshd_config中的相关参数是否配置。

ssh允许使用root用户使用密码登陆

  • 修改配置文件 vim /etc/ssh/sshd_config
  • 允许用root用户登录 PermitRootLogin yes
  • 允许密码登录PasswordAuthentication yes
  • 重启SSH服务systemctl restart sshd

配置密钥免密码登陆

如果已经在云服务器控制中心生成了秘钥,就请略过下面的生成秘钥,直接修改配置文件即可

  • cd 回到家目录
  • ssh-keygen -t rsa 生成密钥,一路回车即可
  • cd .ssh 查看密钥,隐藏文件需要 ll -a 才能看见
  • vim /etc/ssh/sshd_config 修改SSH配置文件
    • PermitRootLogin yes
      • 禁用root账户登录,如果是用root用户登录请开启
    • StrictModes no
      • 是否让sshd 去检查用户家目录或相关档案的权限数据,这是为了担心使用者将某些重要档案的权限设错,可能会导致一些问题所致。例如使用者的 ~.ssh/ 权限设错时,某些特殊情况下会不许用户登入
    • RSAAuthentication yes
    • PubkeyAuthentication yes
      • 是否允许用户自行使用成对的密钥系统进行登入行为,仅针对 version 2。
    • AuthorizedKeysFile .ssh/authorized_keys
      • 至于自制的公钥数据就放置于用户家目录下的 .ssh/authorized_keys 内
    • PasswordAuthentication no
      • 有了证书登录了,就禁用密码登录吧,安全要紧
  • 写入公钥数据。
    • cat id_ras.pub >> authorized_keys
      • 把公钥数据id_rsa.pub附加到 authorized_keys 这个档案内
    • systemctl restart sshd
      • 重启SSH服务
  • 下载私钥
    • 使用lrzsz工具进行上传下载。
    • yum -y install lrzsz
      • 如果系统默认没有安装的话先进行安装
    • sz id_ras
      • 仍然在当前目录下,直接输入命令后即可弹出对话框,让你选择存放到本地的位置,放到桌面即可,方便选择
    • 使用你的远程连接工具进行登录,登录方式中选择密钥登录,然后浏览选中刚才下载的密钥进行导入,导入后下载的密钥请存放到安全位置,以后就可以直接登录不输密码了,本人使用Xshell,如下图。
  • 以上所有配置完成,看网上别的教程还说要注意各文件权限问题,我做实验的过程没有遇到,也可能我使用的是root用户的原因,如果你们在过程中有权限报错,建议尝试设置权限如下:

    ~/.ssh/ 700
    .ssh/authorized_keys 644
    .ssh/id_rsa 600 且属于你当前要添加的用户
  • (非必要,仅供参考)让服务器更安全,开启密码和证书双重验证,先修改SSH配置文件:
    • vim /etc/ssh/sshd_config
    • PasswordAuthentication 改为yes
    • 然后再加一条:AuthenticationMethods publickey,password
    • 重启SSH服务:systemctl restart sshd.service
  • PS:在配置完成后不要关闭当前的远程连接窗口,你可以使用新建连接尝试登陆,以免配置出错,造成服务器无法登陆。
  • PSPS:如果还是打不开,可以尝试先打开网页版的远程登录,登陆后再使用远程连接工具进行连接。

 

转载于:https://my.oschina.net/prosouly/blog/1837799

你可能感兴趣的:(centos 7 xshell 突然连接不上 linux ssh sshd 的问题)