提示:SSH远程访问服务会在后续章节“linux-运维实战”中,在远程控制腾讯云服务器时使用到,是保证你的服务器不被别人黑掉的重要知识点,所以必须牢牢掌握。
带端口和不带端口ssh远程连接服务器(这里以虚拟机为例,下一章咱们再去腾讯云买服务器玩儿)
[C:\~]$ ssh [email protected]
[C:\~]$ ssh [email protected] 22
PS:不带端口时,就是默认采用了22端口
[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,接着做下面的实验。
保证Linux服务器开启ssh之后的基本安全,要做到以下四点:
有效防止黑客利用暴力破解工具,在已知用户名root的情况下,轻易将你的root密码破解。
即使你禁止了root使用ssh访问远程Linux服务器,但是依然存在这样一种可能:黑客可能通过社交软件了解了一些你的个人信息,了解到你可能用你的英文名或者社交昵称等作为你的服务器用户名,然后暴力破解出你的用户名和密码,黑掉你的服务器。所以用密码登录服务器,始终是不安全的。
不用密码登录,那咱们怎么验证身份呢?这里我们可以采用比密码安全不知道几万倍的非对称密钥登录ssh服务,别人没有你的秘钥,就无法ssh远程操控你的服务器。
ssh的默认端口号是22,咱们之前用的命令:
[C:\~]$ ssh [email protected]
[C:\~]$ ssh [email protected] 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 [email protected]
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 [email protected] 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
虚拟终端这个不好演示,截图的话也没啥意义,上面的命令行足矣
本篇到此结束