linux-运维进阶-14 SSH远程访问服务

linux-运维进阶-14 SSH远程访问服务

提示:SSH远程访问服务会在后续章节“linux-运维实战”中,在远程控制腾讯云服务器时使用到,是保证你的服务器不被别人黑掉的重要知识点,所以必须牢牢掌握。

知识回顾

带端口和不带端口ssh远程连接服务器(这里以虚拟机为例,下一章咱们再去腾讯云买服务器玩儿)

[C:\~]$ ssh root@192.168.141.12

[C:\~]$ ssh root@192.168.141.12 22

PS:不带端口时,就是默认采用了22端口

nmcli网络管理命令

查看当前网络设备

[root@localhost ~]# nmcli connection show
NAME                UUID                                  TYPE      DEVICE 
Wired connection 1  e574440b-5a39-3a2b-a14d-ea6a2d920a7e  ethernet  ens37  
ens33               9c86a9bc-0939-4790-8580-274041e5eff3  ethernet  ens33  
[root@localhost ~]# 

查看指定网络设备的详细信息

[root@localhost ~]# nmcli connection show ens33

给网卡绑定多个配置文件

# 给网卡ens33增加一个名为ens60的配置文件
[root@localhost ~]# nmcli connection add con-name ens60 ifname ens33 autoconnect no type ethernet ipv4.addresses 192.168.141.200/24 gw4 192.168.141.2
Connection 'ens60' (8ad23f3d-e490-48a8-bc9f-273ae773435a) successfully added.
[root@localhost ~]# nmcli connection show
NAME                UUID                                  TYPE      DEVICE 
Wired connection 1  e574440b-5a39-3a2b-a14d-ea6a2d920a7e  ethernet  ens37  
ens33               9c86a9bc-0939-4790-8580-274041e5eff3  ethernet  ens33  
ens60               8ad23f3d-e490-48a8-bc9f-273ae773435a  ethernet  --     

# 启用ens60配置文件
[root@localhost ~]# nmcli connection up ens60

# 启用了这个配置之后,IP就可以ping通,但ifconfig可能看不到这个配置,同时ens33的ip会变化,xshell会断开,这个先不用着急。

验证:

由于xshell、4已经断开,咱们在直接虚拟机里查看当前网卡ip

可以看到ip 192.168.141.200已经加上去了

那么咱们用nmcli网络管理命令管理网路的配置就到此结束

接下来咱们在虚拟机里重启网络服务,继续下面的实验

[root@localhost ~]# systemctl restart network
[root@localhost ~]# ip add

可以看到原先的ip又回来了,现在又可以用xshell连接192.168.141.12这个ip,接着做下面的实验。

SSH远程访问服务

保证Linux服务器开启ssh之后的基本安全,要做到以下四点:

  1. 禁止root使用ssh访问远程Linux服务器
  2. 禁止使用密码登录ssh服务
  3. 使用非对称密钥登录ssh服务
  4. 修改ssh服务的默认端口号

解析:

1.禁止root使用ssh访问远程Linux服务器

有效防止黑客利用暴力破解工具,在已知用户名root的情况下,轻易将你的root密码破解。

2.禁止使用密码登录ssh服务

即使你禁止了root使用ssh访问远程Linux服务器,但是依然存在这样一种可能:黑客可能通过社交软件了解了一些你的个人信息,了解到你可能用你的英文名或者社交昵称等作为你的服务器用户名,然后暴力破解出你的用户名和密码,黑掉你的服务器。所以用密码登录服务器,始终是不安全的。

3.使用非对称密钥登录ssh服务

不用密码登录,那咱们怎么验证身份呢?这里我们可以采用比密码安全不知道几万倍的非对称密钥登录ssh服务,别人没有你的秘钥,就无法ssh远程操控你的服务器。

4.修改ssh服务的默认端口号

​ ssh的默认端口号是22,咱们之前用的命令:

[C:\~]$ ssh root@192.168.141.12
[C:\~]$ ssh root@192.168.141.12 22

PS:不带端口时,就是默认采用了22端口

这两条命令就是通常我们ssh远程访问服务器所使用的命令,许多小白级别的运维人员,用的root加密码123456就可以登录上去,话说就算小白同学多个心眼改一下ssh端口号,黑客也相对没那么容易攻破你的服务器哇!

步骤:

1.新建一个用户组afeng,然后新建一个用户aaa,用来代替root的使用,加入到afeng组,可以使用sudo命令借用root的权限来管理Linux服务器

[root@localhost ~]# groupadd afeng
[root@localhost ~]# useradd aaa -G afeng 
[root@localhost ~]# cat /etc/group | grep aaa
afeng:x:1000:aaa
aaa:x:1001:
[root@localhost ~]# 
[root@localhost ~]# cat /etc/passwd | grep aaa
aaa:x:1000:1001::/home/aaa:/bin/bash
[root@localhost ~]# 

可以看到,用户aaa的UID是1000,GID是1001对应的也就是aaa,所以其主组是aaa
从/etc/group下的afeng:x:1000:aaa也可以看出afeng是aaa的附属组

设置用户aaa的密码
[root@localhost ~]# passwd aaa
Changing password for user aaa.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@localhost ~]# 

2.锁定root用户的密码

[root@localhost ~]# passwd -l root
Locking password for user root.
passwd: Success

# 查看root用户密码的状态
[root@localhost ~]# passwd -S root
root LK 2018-09-24 0 99999 7 -1 (Password locked.)
[root@localhost ~]# 

这时候,我们已经可以用普通用户登录到Linux服务器,用sudo su root切换到root用户继续使用root。

可以用xshell另外多开一个会话来验证一下

[C:\~]$ ssh aaa@192.168.141.12


Connecting to 192.168.141.12:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

WARNING! The remote SSH server rejected X11 forwarding request.
[aaa@localhost ~]$ 

发现咱们现在确实可以登陆上来,接下来验证一下咱们能否用sudo su root切换到root用户继续使用root。

[aaa@localhost ~]$ sudo su root

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for aaa: 
aaa is not in the sudoers file.  This incident will be reported.
[aaa@localhost ~]$ 

结果咱们被拒绝了,因为现在aaa用户尚未在sudoers file里。

那咱们回到原来的会话(xshell一个窗口就是一个会话),也就是root登录着的那个会话,先把aaa添加进sudoers file里。

[root@localhost ~]# visudo 
找到
root    ALL=(ALL)       ALL
在上面这一行下面新加一行:
aaa     ALL=(ALL)       ALL
保存退出

现在切换回aaa那个会话,再次验证咱们能否用sudo su root切换到root用户继续使用root

[aaa@localhost ~]$ sudo su root
[sudo] password for aaa: 
[root@localhost aaa]# 

这回可以了

3.设置ssh服务,禁止root使用ssh访问远程Linux服务器,禁止使用密码登录ssh服务器,改变服务端口号为10022

[root@localhost ~]# vim /etc/ssh/sshd_config 

禁止Root使用ssh远程登录
38行将
#PermitRootLogin yes
改成
PermitRootLogin no
别忘了#号也要去掉,#号是备注的意思

开启证书登录的功能
43行将 
#PubkeyAuthentication yes
去掉注释改成
PubkeyAuthentication yes


禁止使用密码登录ssh服务器
65行将
PasswordAuthentication yes
改为
PasswordAuthentication no

改变ssh服务端口号
17行将
#Port 22
改成
Port 10022


保存后退出,重启ssh服务(sshd就是ssh device的意思)
[root@localhost ~]# systemctl restart sshd
如果这里报错了,那一定是上面/etc/ssh/sshd_config 这个配置文件你哪里写错了

4.向防火墙中添加修改的端口,如果开启了selinux,在修改端口号的时候会失败,我们直接关闭selinux

[root@localhost ~]# firewall-cmd --zone=public --add-port=10022/tcp --permanent 
success
[root@localhost ~]# firewall-cmd --reload 
success
查看端口是否添加成功:
[root@localhost ~]# firewall-cmd --zone=public --query-port=10022/tcp
yes
[root@localhost ~]# 

[root@localhost ~]# vim /etc/selinux/config 
将
SELINUX=enforcing
改为
SELINUX=disabled


检查一下
[root@localhost ~]# 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=disabled
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted 


[root@localhost ~]# 

5.生成证书:

注意:新的用户需要生成新的密钥来用来登录

xshell的新会话中先切换回aaa
[root@localhost aaa]# su aaa
[aaa@localhost ~]$ ssh-keygen 
此处一直敲回车即可

​ 命令敲完后,系统会自动生成~/.ssh目录,这个目录下会保存Linux的公钥和私钥以及存放客户端公钥的文件.ssh/authorized_keys

6.windows生成客户端公钥:

此处一直点下一步,直到进入如下选项时,我们设一个密钥名称,密码和确认那俩框不用填,点击完成即可

7.将复制的内容写入到Linux系统中我们新建用户aaa的~/.ssh/authorized_keys文件中

[aaa@localhost ~]$ whoami
aaa
[aaa@localhost ~]$ vim ~/.ssh/authorized_keys
[aaa@localhost ~]$ cat ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAurKiTVI2mKJswDThaEYNF/DiBOJZeMTCofxFXw0ZjD0fisnKmLmnBQKEna1NArHFVn42RcwRYM3o5KezSNz9dcj0QB2KB9Rby7N5RBL6WQP5HhhclY5ldHI8AIrMDKtzd+IbZYoMknIXWt0iQ9Z069YmQB4dQlQrq9ZUxEdgz5mhusjoSZxVu2kf14/qhuK28/Mo5NLATvTIbN04D8bXX2Jh9vlhhhK8XCnvyuIxV2lNvfU5K88CgM+utOAvELjKhsiMlmrhvNs4kh5o3JSpmIyJfayFpnLvdrGn9w6u1ndzoTE29oTCUKllwD3BZRqPmdVGDF+koBLzipNMCjk21w== rsa 2048-013019
[aaa@localhost ~]$ chmod 600 ~/.ssh/authorized_keys
[aaa@localhost ~]$ 

8.重启sshd服务,让ssh配置生效(改/etc/sshd/目录下的文件需要重新服务,添加删除用户密钥并不需要重启sshd服务)

[root@localhost ssh]# systemctl restart sshd
[root@localhost ssh]# netstat -ntlp | grep 10022
tcp        0      0 0.0.0.0:10022           0.0.0.0:*               LISTEN      6110/sshd           
tcp6       0      0 :::10022                :::*                    LISTEN      6110/sshd           
[root@localhost ssh]# 

9.用xshell远程登录Linux服务器

用户aaa成功登录啦!

情况一:现在假设黑客猜到了你的ssh端口号是10022,又把你的密钥也搞到了手,现在他尝试用root用户登录

[C:\~]$ ssh root@192.168.141.12 10022

结果如下图,黑客登录失败,失败的原因就是我们拒绝了root登录

情况二:假设黑客搞到了你的用户名aaa和ssh端口号10022,但是服务器是拒绝用密码登陆的,也就是他没法爆破,只能用密钥登录,可惜他没有你的aaa用户的密钥feng_system,所以也登录不上

情况三:这是99.99%的情况

别人不知道你的端口号,也不知道你的用户名,更没有你的用户密钥,所以服务器很安全。但是服务器ip很容易就会被知道,ping一下咱网站域名就可以看到服务器ip了,比如ping一下我的个人博客https://xiaoxingzone.coding.me/如下图

黑客仅仅知道你的服务器ip的话,是无法ssh远程控制你的服务器的。但是黑客可以搞一个低轨道粒子炮之类的工具,对你的服务器一直轰炸,或者搞一些其他的攻击方式,让你的服务器很难受,这就涉及到网络安全方面的知识了。

​ 此外,我们后续章节中还会介绍如何禁止别人ping咱们的服务器。

另外,HEXO个人博客利用coding和github开源仓库搭建,并没有搭建在我自己的服务器上,所以无需多虑。关于ssh的配置后面我们会在运维实战章节再次用到。

不间断会话服务(虚拟终端)

因为在执行一些脚本的时候,可能要使用的时间很长,而我们电脑可能不会开那么久的终端软件,那么这时候,就要有一个虚拟的终端来帮助我们执行长时间的任务

安装screen

[aaa@localhost ~]$ sudo su root
[sudo] password for aaa: 
[root@localhost aaa]# 
[root@localhost aaa]# yum install screen -y

新建一个终端任务

[root@localhost ~]# screen -S lnmp
回车之后进入到新的终端开始一个任务

[root@localhost aaa]# wget http://soft.vpser.net/lnmp/lnmp1.5.tar.gz -cO lnmp1.5.tar.gz && tar zxf lnmp1.5.tar.gz && cd lnmp1.5 && ./install.sh lnmp

如果任务没有执行完,我们需要关闭终端,可以直接关掉终端(千万不要用CTRL+Z或者CTRL+C),也可以用ctrl+a,松开a再按一下d(ctrl不要放开)临时退出虚拟终端

恢复最近的一个终端,用screen -r命令

[root@localhost aaa]# screen -r

如果有多个虚拟终端,我们可以使用命令查看后台运行的虚拟终端

[root@localhost aaa]# screen -list
There is a screen on:
	6327.lnmp	(Detached)
1 Socket in /var/run/screen/S-root.

[root@localhost aaa]# 

要恢复指定的虚拟终端

[root@localhost aaa]# screen -r lnmp

退出虚拟终端的话,进入虚拟中断(ctrl+c)之后用exit退出就行啦

[root@localhost lnmp1.5]# exit

虚拟终端这个不好演示,截图的话也没啥意义,上面的命令行足矣

本篇到此结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值