00:00/00:00

本章节已编写及校对完毕,现有奖征集建议、若您发现本章中有错别字或补充欢迎联系刘遄老师QQ:5604583。

章节简述: 

本章节刘遄老师先会给同学们逐一演示使用nmtui命令配置网卡参数,通过nmcli命令查看网卡网络信息并管理网卡会话服务,让您能够做到在不同工作场景中快速的切换网卡网络参数,以及学习手工绑定mode6模式双网卡来实现对网络的负载均衡及冗余技术等实用实验。

深入了解ssh协议与sshd服务程序的理论知识,掌握对Linux系统的远程管理方法以及对Linux系统中服务程序的配置方法,实践操作基于密钥验证的sshd服务程序远程验证登陆,并学习使用screen服务程序实现远程管理Linux系统的不间断会话等技术。当同学们掌握了本章节内的知识后,就已经基本完全拥有了对Linux系统的配置管理能力,未来章节中将会陆续引入大量实用服务配置课程,让您能够对大多数生产环境中用到的热门服务程序有广泛的了解。

9.1 配置网卡服务
9.1.1 配置网卡参数

坚持读到这个章节的同学们其实已经能够管理Linux系统了,只不过大家还在“爬山”,有朝一日达到山峰顶端,回头往下一望便能知道自己的努力有多值得。在接下来学习配置服务之前,还必须要先保证系统主机之间是能够顺畅进行数据传输的,因为如果网络是不通的,那么即便把各项服务部署得再好也不能让用户顺利的访问到,所以配置网络是正式学习部署服务前的最后一门重要知识。在前面第4章的4.1.3小节已经教过同学们使用vim文本编辑器来配置网卡参数,在红帽RHEL7系统中有至少五种网卡的配置方法,刘遄老师尽量在咱们的《Linux就该这么学》一书中为同学们逐个演示一遍,这次教给同学们用nmtui命令来配置网卡吧~具体的配置步骤如图9-1至9-8所示,刘遄老师会在不容易理解的地方再额外加上解释说明。

图9-1 执行nmtui命令来运行网络配置工具

图9-2 选中“编辑一个网卡连接(Edit a connection)”并敲击回车

红帽RHEL5系统、红帽RHEL6系统及其他大多数早期的Linux系统中,网卡名称一直都是叫做eth0、eth1、eth2…等等,但在红帽RHEL7系统中则变成了eno16777736这种样子,不过除此名称以外并没有其他实际大的变化,因此咱们的网卡配置实验完全可以适用于不同版本的Linux系统。

图9-3 选中要编辑的网卡名称,然后敲击“编辑(Edit)”选项

图9-4 把网卡Ipv4配置方式改成“手动(Manual)”

图9-5 然后点击“显示(Show)”按钮来显示信息配置框

学习刘遄老师的《Linux就该这么学》书籍不仅易懂,而且还有一个特别好的潜在优势——咱们全书中所有的服务端主机IP地址均为192.168.10.10,而客户端主机均为192.168.10.20及192.168.10.30。这样的好处非常明显,就是在以后学习Linux系统服务部署的课程中,您不用再每次都考虑到IP地址变化的问题,专心下来学习具体的服务实验。因此现在把服务端主机的网卡配置信息填写入192.168.10.10/24的网卡参数。

图9-6 填写入IP地址和网关信息

图9-7 点击网卡配置框最下面的<OK>确认按钮来保存配置

图9-8 点击界面最下面的<Quit>来退出网卡编辑工具

虽然配置Linux系统网卡的步骤到此就已经可以结束了,但刘遄老师在培训讲课中发现很多学生在安装红帽RHEL7系统的时候默认没有激活网卡,如果真遇到了这种情况也不用担心,只需要使用vim编辑器来将网卡配置文件中的ONBOOT参数修改成yes就可以保证网卡会在系统重启后依然生效了。

[root@linuxprobe ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=eno16777736
UUID=ec77579b-2ced-481f-9c09-f562b321e268
ONBOOT=yes
IPADDR0=192.168.10.10
HWADDR=00:0C:29:C4:A4:09
PREFIX0=24
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes

Linux系统中的服务配置文件修改过后并不会对服务程序立即产生效果,要想让服务程序获取到最新的配置文件内容,咱们还需要手动的重启一下相应的服务~然后就能看到网络畅通了:

[root@linuxprobe ~]# systemctl restart network
[root@linuxprobe ~]# ping -c 4 192.168.10.10
PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data.
64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.056 ms
64 bytes from 192.168.10.10: icmp_seq=2 ttl=64 time=0.099 ms
64 bytes from 192.168.10.10: icmp_seq=3 ttl=64 time=0.095 ms
64 bytes from 192.168.10.10: icmp_seq=4 ttl=64 time=0.095 ms

--- 192.168.10.10 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2999ms
rtt min/avg/max/mdev = 0.056/0.086/0.099/0.018 ms
9.1.2 创建网络会话

在红帽RHEL和Centos系统中一直在默认使用着NetworkManager服务来提供网络服务,这是一种动态管理配置网络的守护进程服务,能够让网络设备连接保持工作状态,可以使用类似nmcli的命令来管理NetworkManager服务。nmcli是一款基于命令行终端的网卡网络配置工具,虽然功能丰富但其参数过于复杂,它不仅能够轻松的查看网卡信息或网络状态,还可以管理网卡会话功能,更能够查看到网卡设备的具体详细信息:

[root@linuxprobe ~]# nmcli connection show
NAME UUID TYPE DEVICE 
eno16777736 ec77579b-2ced-481f-9c09-f562b321e268 802-3-ethernet eno16777736 
[root@linuxprobe ~]# nmcli con show eno16777736
connection.id: eno16777736
connection.uuid: ec77579b-2ced-481f-9c09-f562b321e268
connection.interface-name: --
connection.type: 802-3-ethernet
connection.autoconnect: yes
connection.timestamp: 1487348994
connection.read-only: no
connection.permissions: 
connection.zone: --
connection.master: --
connection.slave-type: --
connection.secondaries: 
connection.gateway-ping-timeout: 0
………………省略部分输出信息………………

另外在红帽RHEL7系统中的网卡服务已经支持了多会话技术了,这个功能非常类似于Firewalld防火墙服务中的zone区域技术,让用户能够在多个配置文件中快速切换。比如白天需要拿着笔记本电脑去公司上班,下午去咖啡厅休息一下,然后晚上再把笔记本电脑拿回到家中,如果在公司上班工作的时候是需要手工指定网卡IP地址,而晚上回家后用无线路由器是DHCP自动分配网卡IP地址,对传统网卡服务这样改来改去一定会很麻烦,但是使用了网卡会话功能就不一样了,咱们只需要在不同的使用环境中激活相应的会话服务,就能对网卡参数进行整体性的自动切换了。

可以使用nmcli命令将在公司上班时的网卡会话叫做company,而在家里的网卡会话叫做house,然后按照connection(会话),add(添加动作),con-name(会话名称),type(网卡类型),ifname(网卡名称)的格式来创建网卡会话就可以了,例如依次创建公司和家庭的网卡会话:

[root@linuxprobe ~]# nmcli connection add con-name company ifname eno16777736 autoconnect no type ethernet ip4 192.168.10.10/24 gw4 192.168.10.1
Connection 'company' (86c71220-0057-419e-b615-38f4014cfdee) successfully added.

[root@linuxprobe ~]# nmcli connection add con-name house type ethernet ifname eno16777736
Connection 'house' (44acf0a7-07e2-40b4-94ba-69ea973090fb) successfully added.

成功创建网卡会话后就可以使用nmcli命令来查看到所有的网卡会话列表了:

[root@linuxprobe ~]# nmcli connection show
NAME UUID TYPE DEVICE 
house        44acf0a7-07e2-40b4-94ba-69ea973090fb 802-3-ethernet -- 
company      86c71220-0057-419e-b615-38f4014cfdee 802-3-ethernet -- 
eno16777736  ec77579b-2ced-481f-9c09-f562b321e268 802-3-ethernet eno16777736 

nmcli命令配置过的网卡会话和参数会直接写入到配置文件中永久生效,这样晚上回到家中后顺手把house居家的网卡会话启用,就可以让网卡设备自动的从无线路由器中获取到IP地址啦,当然如果同学们是在使用虚拟机软件的话,请像如图9-9所示操作一下,把虚拟机系统网卡切换成桥接模式,然后记得重启网卡服务哦~

图9-9 设置虚拟机网卡的模式

[root@linuxprobe ~]# nmcli connection up house 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)
[root@linuxprobe ~]# ifconfig
eno1677773628: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
 inet 192.168.100.128 netmask 255.255.255.0 broadcast 192.168.100.255
 inet6 fe80::20c:29ff:fec4:a409 prefixlen 64 scopeid 0x20<link>
 ether 00:0c:29:c4:a4:09 txqueuelen 1000 (Ethernet)
 RX packets 42 bytes 4198 (4.0 KiB)
 RX errors 0 dropped 0 overruns 0 frame 0
 TX packets 75 bytes 10441 (10.1 KiB)
 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
 inet 127.0.0.1 netmask 255.0.0.0
 inet6 ::1 prefixlen 128 scopeid 0x10<host>
 loop txqueuelen 0 (Local Loopback)
 RX packets 518 bytes 44080 (43.0 KiB)
 RX errors 0 dropped 0 overruns 0 frame 0
 TX packets 518 bytes 44080 (43.0 KiB)
 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
9.1.3 绑定两块网卡

一般生产环境是必须要保证7*24小时不间断提供网络传输服务的,使用网卡绑定技术不仅能够提高网卡带宽的传输速率,还能在其中一块网卡出现故障时,依然能够保证网络正常使用。简单来说,假设咱们对两块网卡实施了绑定技术,这样在正常工作中它们会共同传输数据,使得网络传输的速度变得更快,但只要其中有一块网卡突然出现了故障,另外一块网卡便会在0.1秒内自动顶替上去,保证数据传输不会中断。

第1步:在虚拟机中额外添加1块网卡设备,但同学们请一定要保证两块网卡都处在同一个网卡模式下,如图9-10和图9-11所示,相同网卡模式的设备才可以做网卡绑定实验,否则这两块网卡本身就是不能互相传送数据的。
编辑虚拟机设置,添加网络适配器。

图9-10 向虚拟机系统中额外添加1块网卡设备

保证两块网卡的连接类型都是相同的

图9-11 设置两块网卡设备为相同的网卡模式

第2步:通过vim文本编辑器来配置网卡设备的绑定参数,网卡绑定的理论很类似于前面学习的RAID磁盘阵列组,咱们需要先逐个对参与网卡绑定的设备进行“初始设置”,这些原本独立的网卡设备不需要再有自己的IP地址等信息,让它们支持网卡绑定设备就可以了,然后还需要将绑定后的设备取名为bond0以及把IP地址等信息填写进去,这样当用户访问到相应服务的时候,实际上就是由这两块网卡设备共同的在提供服务。

[root@linuxprobe ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
DEVICE=eno16777736
MASTER=bond0
SLAVE=yes
[root@linuxprobe ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno33554968
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
DEVICE=eno33554968
MASTER=bond0
SLAVE=yes
[root@linuxprobe ~]# vim /etc/sysconfig/network-scripts/ifcfg-bond0
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
DEVICE=bond0
IPADDR=192.168.10.10
PREFIX=24
DNS=192.168.10.1
NM_CONTROLLED=no

第3步:让内核支持网卡绑定驱动,常见的网卡绑定驱动模式有三种——mode0、mode1和mode6。比如对于一个提供NFS或者SAMBA服务的文件服务器来讲,如果只能提供百兆网络的最大传输速率,但同时下载用户又特别多的情况下,那么网络压力一定是极大的。再比如是一个提供iscsi服务的网络存储服务器,在生产环境中网卡的可靠性是极为重要的,这种情况下就必须同时能够保证网络的传输速率以及网络的安全性,因此比较好的选择就是mode6方案了,因为mode6平衡负载模式能够让两块网卡同时一起工作,当其中一块网卡出现故障后能自动备援,提供了可靠的网络传输保障,并且不需要交换机设备支援。

mode0平衡负载模式:平时两块网卡均工作,且自动备援,采用交换机设备支援。

mode1自动备援模式:平时只有一块网卡工作,故障后自动替换为另外的网卡。

mode6平衡负载模式:平时两块网卡均工作,且自动备援,无须交换机设备支援。

使用vim文本编辑器来创建一个网卡绑定内核驱动文件,使得bond0网卡设备能够支持绑定技术(bonding),同时定义网卡绑定为mode6平衡负载模式,且当出现故障时自动切换时间为100毫秒:

[root@linuxprobe ~]# vim /etc/modprobe.d/bond.conf
alias bond0 bonding
options bond0 miimon=100 mode=6

第4步:重启网络服务后网卡绑定操作即可顺利成功,正常情况下只有bond0网卡才会有IP地址等信息:

[root@linuxprobe ~]# systemctl restart network
[root@linuxprobe ~]# ifconfig
bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500
inet 192.168.10.10 netmask 255.255.255.0 broadcast 192.168.10.255
inet6 fe80::20c:29ff:fe9c:637d prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:9c:63:7d txqueuelen 0 (Ethernet)
RX packets 700 bytes 82899 (80.9 KiB)
RX errors 0 dropped 6 overruns 0 frame 0
TX packets 588 bytes 40260 (39.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

eno16777736: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500
ether 00:0c:29:9c:63:73 txqueuelen 1000 (Ethernet)
RX packets 347 bytes 40112 (39.1 KiB)
RX errors 0 dropped 6 overruns 0 frame 0
TX packets 263 bytes 20682 (20.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

eno33554968: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500
ether 00:0c:29:9c:63:7d txqueuelen 1000 (Ethernet)
RX packets 353 bytes 42787 (41.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 325 bytes 19578 (19.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

可以在本地主机执行ping 192.168.10.10的命令来检查网络连通性,然后突然在虚拟机硬件配置中随机移除一块网卡设备,能够非常清晰的看到网卡切换的过程(最多有1个数据丢包)。

[root@linuxprobe ~]# ping 192.168.10.10
PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data.
64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.109 ms
64 bytes from 192.168.10.10: icmp_seq=2 ttl=64 time=0.102 ms
64 bytes from 192.168.10.10: icmp_seq=3 ttl=64 time=0.066 ms
ping: sendmsg: Network is unreachable
64 bytes from 192.168.10.10: icmp_seq=5 ttl=64 time=0.065 ms
64 bytes from 192.168.10.10: icmp_seq=6 ttl=64 time=0.048 ms
64 bytes from 192.168.10.10: icmp_seq=7 ttl=64 time=0.042 ms
64 bytes from 192.168.10.10: icmp_seq=8 ttl=64 time=0.079 ms
^C
--- 192.168.10.10 ping statistics ---
8 packets transmitted, 7 received, 12% packet loss, time 7006ms
rtt min/avg/max/mdev = 0.042/0.073/0.109/0.023 ms

出现问题?大胆提问!

因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~

Linux技术交流请加A群:560843(),B群:340829(推荐),C群:463590(推荐),点此查看全国群

*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。

9.2 远程控制服务
9.2.1 配置sshd服务

SSH(Secure Shell)是一种能够提供安全远程登录会话的协议,也是目前远程管理Linux系统最首选的方式,因为传统的ftp或telnet服务是不安全的,它们会把帐号口令和数据资料等数据在网络中以明文的形式进行传送,这种数据传输方式很容易受到黑客“中间人”的嗅探攻击,轻则篡改了传输的数据信息,重则直接抓取到了服务器的帐号密码。

想要通过SSH协议来管理远程的Linux服务器系统,咱们需要来部署配置sshd服务程序,sshd是基于SSH协议开发的一款远程管理服务程序,不仅使用起来方便快捷,而且能够提供两种安全验证的方法——基于口令的安全验证,指的就是用帐号和密码验证登陆,基于密钥的安全验证,则是需要在本地生成密钥对,然后把公钥传送至服务端主机进行的公共密钥比较的验证方式,相比较来说更加的安全。

因为在Linux系统中的一切都是文件,因此要想在Linux系统中修改服务程序的运行参数,实际上也是在修改程序配置文件的过程,sshd服务的配置信息保存在/etc/ssh/sshd_config文件中,运维人员一般会把保存着最主要配置信息的文件称为主配置文件,而配置文件中有许多#(井号)开头的注释行,要想让这些配置参数能够生效,需要修改参数后再去掉前面的井号才行,sshd服务配置文件中重要的参数包括有:

参数 作用
#Port 22 默认的sshd服务端口。
#ListenAddress 0.0.0.0 设定sshd服务端监听的IP地址。
#Protocol 2 SSH协议的版本号。
#HostKey /etc/ssh/ssh_host_key SSH协议版本为1时,私钥存放的位置。
HostKey /etc/ssh/ssh_host_rsa_key SSH协议版本为2时,RSA私钥存放的位置。
#HostKey /etc/ssh/ssh_host_dsa_key SSH协议版本为2时,DSA私钥存放的位置。
#PermitRootLogin yes 设定是否允许root用户直接登录。
#StrictModes yes 当远程用户私钥改变时则直接拒绝连接。
#MaxAuthTries 6 最大密码尝试次数
#MaxSessions 10 最大终端数
#PasswordAuthentication yes 是否允许密码验证
#PermitEmptyPasswords no 是否允许空密码登陆(很不安全)

在红帽RHEL7系统中sshd服务程序已经默认安装好并启动了,可以使用ssh命令来进行远程连接,格式为“ssh [参数] 主机IP地址”,退出登陆则可执行exit命令:

[root@linuxprobe ~]# ssh 192.168.10.20
The authenticity of host '192.168.10.20 (192.168.10.20)' can't be established.
ECDSA key fingerprint is 4f:a7:91:9e:8d:6f:b9:48:02:32:61:95:48:ed:1e:3f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.20' (ECDSA) to the list of known hosts.
root@192.168.10.20's password:此处输入远程主机root用户的密码
Last login: Wed Apr 15 15:54:21 2017 from 192.168.10.10
[root@linuxprobe ~]# 
[root@linuxprobe ~]# exit
logout
Connection to 192.168.10.10 closed.

咱们可以尝试不让超级管理员root用户远程登陆到sshd服务上,这样一方面能提高服务器被黑客暴力破解密码的机率,也能让同学们锻炼下对服务程序的配置能力,首先需要使用vim文本编辑器打开sshd服务的主配置文件,然后把约第48行#PermitRootLogin no参数前的#号去掉,并把参数值yes改成no,这样就不再允许root用户远程登陆了,最后记得保存并退出文件即可,修改后的参数如下:

[root@linuxprobe ~]# vim /etc/ssh/sshd_config 
 ………………省略部分输出信息………………
 46 
 47 #LoginGraceTime 2m
 48 PermitRootLogin no
 49 #StrictModes yes
 50 #MaxAuthTries 6
 51 #MaxSessions 10
 52
 ………………省略部分输出信息………………

不要忘记一件重要的事情,一般的服务程序并不会在修改配置文件后就立即获取到了最新的运行参数,如果想让新的配置文件起效,则需要手动的重启一下服务程序才行,并且最好也能将这个服务程序加入到开机启动项中,这样使得下一次重启时sshd服务程序会自动运行。

[root@linuxprobe ~]# systemctl restart sshd
[root@linuxprobe ~]# systemctl enable sshd

超级管理员root用户再来尝试连接sshd服务程序就会提示不可访问的错误信息了,虽然sshd服务程序的参数相对比较简单,但这就是Linux系统中配置服务程序的正确方法,同学们只要能做到活学活用,那即便以后遇到了没见过的服务也一样能够配置了~

[root@linuxprobe ~]# ssh 192.168.10.10
root@192.168.10.10's password:此处输入远程主机root用户的密码
Permission denied, please try again.
9.2.2 安全密钥验证

加密算法是对信息进行编码和解码的技术,它能够将原本可直接阅读的明文信息通过一定的加密算法译成密文形式。密钥即是密文的钥匙,包括有私钥和公钥之分,在日常工作中如果担心传送的数据被他人监听截获到,就可以在传送前先使用公钥进行加密处理,然后再进行数据传送,这样只有掌握私钥的用户才能解密这段数据,除此之外其他人即便截获了数据内容一般也很难再破译成明文信息。总结来说,日常生产环境中使用密码进行口令验证终归存在着被骇客暴力破解或嗅探截获的风险,如果正确的配置密钥验证方式,那么一定会让您的sshd服务程序更加的安全。

第1步:在客户端主机中生成“密钥对”并把公钥传送到远程服务器中:

[root@linuxprobe ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):直接敲击回车或设置密钥的存储路径       
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 直接敲击回车或设置密钥的密码
Enter same passphrase again: 再次敲击回车或设置密钥的密码
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
40:32:48:18:e4:ac:c0:c3:c1:ba:7c:6c:3a:a8:b5:22 root@linuxprobe.com
The key's randomart image is:
+--[ RSA 2048]----+
|+*..o .          |
|*.o  +           |
|o*    .          |
|+ .    .         |
|o..     S        |
|.. +             |
|. =              |
|E+ .             |
|+.o              |
+-----------------+

第2步:把客户端主机中生成好的公钥文件传送至远程主机:

[root@linuxprobe ~]# ssh-copy-id 192.168.10.10
The authenticity of host '192.168.10.20 (192.168.10.10)' can't be established.
ECDSA key fingerprint is 4f:a7:91:9e:8d:6f:b9:48:02:32:61:95:48:ed:1e:3f.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.10.10's password:此处输入远程服务器主机密码
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '192.168.10.10'"
and check to make sure that only the key(s) you wanted were added.

第3步:设置服务器主机只允许密钥验证,拒绝传统口令验证方式,记得修改配置文件后保存并重启sshd服务程序哦~:

[root@linuxprobe ~]# vim /etc/ssh/sshd_config 
 ………………省略部分输出信息………………
 74 
 75 # To disable tunneled clear text passwords, change to no here!
 76 #PasswordAuthentication yes
 77 #PermitEmptyPasswords no
 78 PasswordAuthentication no
 79 
 ………………省略部分输出信息………………
[root@linuxprobe ~]# systemctl restart sshd

第4步:在客户端主机尝试登陆到服务端主机,此时无需输入密码口令也可直接验证登陆成功:

[root@linuxprobe ~]# ssh 192.168.10.10
Last login: Mon Apr 13 19:34:13 2017
9.2.3 远程传输命令

Scp安全传输服务(Secure copy)是一种基于ssh协议的网络传输命令,不同于第二章讲过的cp命令只能在本地磁盘中进行文件复制,scp不仅能够通过网络传送数据,而且所有的数据都将被加密。例如想把一些文件通过网络传送到其他主机上面,又恰巧两台主机都是Linux系统,这时就可以使用到scp命令轻松的达到目的啦~

scp命令用于在网络中安全的传输文件,格式为:“scp [参数] 本地文件 远程帐户@远程IP地址:远程目录”。

参数 作用
-v 显示详细的连接进度
-P 指定远程主机的sshd端口号
-r 传送文件夹时请加此参数
-6 使用ipv6协议

想要使用scp命令把文件从本地复制到远程主机,首先需要以绝对路径的形式写清本地文件的存放位置,对于要传送整个目录内所有数据的时候还需要额外添加-r参数递归操作,然后写上要传送到的远程服务器主机IP地址,默认会以当前本地登陆的用户身份来进行验证,如果想使用其他指定用户的身份进行校验,可使用用户名@主机地址的参数格式,最后需要在远程主机IP地址后以:(冒号)起始写上要传送到对方主机的那个目录中,把参数写正确并验证用户身份后即可完成传送工作。因为scp命令是基于ssh协议进行文件传送的,而咱们已经在刚刚9.2.2小节设置好了密钥验证,因此当前进行文件传送的话是连帐号密码都不需要的。

[root@linuxprobe ~]# echo "Welcome to LinuxProbe.Com" > readme.txt
[root@linuxprobe ~]# scp /root/readme.txt 192.168.10.20:/home
root@192.168.10.20's password:此处输入远程主机中root用户的密码
readme.txt 100% 26 0.0KB/s 00:00

不仅如此,强大的scp命令还能够把远程主机的文件下载到本地主机,命令格式为scp [参数] 远程用户@远程IP地址:远程文件 本地目录,例如可以把远程主机中的系统版本信息文件下载过来,而无需登录到远程主机后再传送过来,省去了很多不必要的周折。

[root@linuxprobe ~]# scp 192.168.10.20:/etc/redhat-release /root
root@192.168.10.20's password:此处输入远程主机中root用户的密码
redhat-release 100% 52 0.1KB/s 00:00 
[root@linuxprobe ~]# cat redhat-release 
Red Hat Enterprise Linux Server release 7.0 (Maipo)
9.3 不间断会话服务

大家学完了ssh服务后有没有发现一个很重要的事情——当远程连接的终端被关闭时,运行在对方服务器上的命令也会随之中断。简单来说,如果在执行打包文件的命令,或者是正在用脚本安装某个服务程序,通常中途是绝对不能关闭远程窗口或断开网络链接的,即便是网络不稳定的波动情况都有可能导致任务被中断,只能重新远程链接到服务器再重新开始任务。还有些时候正在执行打包文件的命令,又同时想用脚本来安装某个服务程序,这个时候因为打包文件的输出信息会占满了用户的屏幕界面,所以只能再额外打开一个远程控制窗口,久而久之了,难免会忘记那个远程窗口是做什么用的了。

Screen是一款由GNU开源计划开发的多视窗远程控制管理服务,简单来说就是为了解决上述情况中网络异常中断或同时控制多个远程窗口而设计的程序。Screen服务程序不仅能够解决上述问题,而且用户在使用过程中还可以同时在多个终端会话中自由切换,能够做到会话恢复——即便网络中断,也可让会话随时恢复,用户不会失去对命令终端的控制,多窗口——每个会话都是独立运行的,拥有各自独立的编码、输入输出和窗口缓存,会话共享——可以使多个用户从不同终端使用同一个会话,也可让他们看到完全相同的输出信息的。

Screen服务程序在红帽RHEL7系统中并没有默认安装,因此需要配置yum仓库来安装这款软件,首先第1步请同学们如图9-12所示,把虚拟机中的CD/DVD光盘选项中选择到下载好的系统iso镜像。

Linux就该这么学

您只需扫描右侧二维码或微信搜索:"LinuxProbe"即可完成下载

该页面的验证码:

请关注《Linux就该这么学》的微信公众号,回复:“验证码”,获取该页面的验证码。

确认光盘已被选中

图9-12 把虚拟机的光盘设备指向iso镜像

第2步:把光盘设备中的系统镜像挂载到/media/cdrom目录:

[root@linuxprobe ~]# mkdir -p /media/cdrom
[root@linuxprobe ~]# mount /dev/cdrom /media/cdrom
mount: /dev/sr0 is write-protected, mounting read-only

第3步:使用Vim文本编辑器创建Yum仓库的配置文件,下列具体参数含义可参考第4章4.1.4小节:

[root@linuxprobe ~]# vim /etc/yum.repos.d/rhel7.repo
[rhel7]
name=rhel7
baseurl=file:///media/cdrom
enabled=1
gpgcheck=0

现在就可以使用yum仓库来安装screen服务程序软件啦,出于对自然环境的保护意识,刘遄老师将对后面章节中出现的yum软件安装信息进行筛选——把重复性高与无意义的非必要信息省略,以来节省及避免不必要的纸张浪费,为后代不仅能享受科技之便捷,还能拥有自然之舒适献出一点努力:

[root@linuxprobe ~]# yum install screen 
Loaded plugins: langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
rhel | 4.1 kB 00:00 
Resolving Dependencies
--> Running transaction check
---> Package screen.x86_64 0:4.1.0-0.19.20120314git3c2946.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
 Package Arch Version Repository
 Size
================================================================================
Installing:
 screen x86_64 4.1.0-0.19.20120314git3c2946.el7 rhel 551 k
Transaction Summary
================================================================================
Install 1 Package
Total download size: 551 k
Installed size: 914 k
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
 Installing : screen-4.1.0-0.19.20120314git3c2946.el7.x86_64 1/1 
 Verifying : screen-4.1.0-0.19.20120314git3c2946.el7.x86_64 1/1 
Installed:
 screen.x86_64 0:4.1.0-0.19.20120314git3c2946.el7 
Complete!
9.3.1 管理远程会话

screen命令能做的事情非常多,可以用-S参数创建会话窗口,用-d参数把指定会话离线,用-r参数把指定会话恢复,用-x参数一次性恢复所有的会话,用-ls参数显示当前已有的会话,以及用-wipe参数把目前无法使用的会话删除等等功能。

创建一个名称为backup的会话窗口,同学们可以留心观察下,当咱们敲下这条命令的一瞬间屏幕会快速闪动一下,这时就已经处在screen服务会话中了,在这个里面运行任何操作都会被后台记录下来:

[root@linuxprobe ~]# screen -S backup
[root@linuxprobe ~]# 

在刚刚执行screen命令后调用系统的默认shell,所以执行命令后会立即返回一个提示符,虽然看起来跟刚刚没有变化,但实际上可以查看到当前的会话正在工作中:

[root@linuxprobe ~]# screen -ls
There is a screen on:
32230.backup (Attached)
1 Socket in /var/run/screen/S-root.

想要退出一个会话也十分简单,只需要向命令行中执行exit命令就可以达到目的:

[root@linuxprobe ~]# exit
[screen is terminating]

日常生产中其实并不是必须先创建会话之后再开始工作,可以直接使用screen命令执行要运行的命令,这样在命令中的一切操作也都会被记录下来,当命令执行结束后screen会话也会自动结束。

[root@linuxprobe ~]# screen vim memo.txt
welcome to linuxprobe.com

为了给同学们演示下screen不间断会话服务的强大之处,咱们先来创建一个名为linux的会话,然后强行把窗口关闭掉(这样与远程控制时突然断网效果相同):

[root@linuxprobe ~]# screen -S linux
[root@linuxprobe ~]# 
[root@linuxprobe ~]# tail -f /var/log/messages 
Feb 20 11:20:01 localhost systemd: Starting Session 2 of user root.
Feb 20 11:20:01 localhost systemd: Started Session 2 of user root.
Feb 20 11:21:19 localhost dbus-daemon: dbus[1124]: [system] Activating service name='com.redhat.SubscriptionManager' (using servicehelper)
Feb 20 11:21:19 localhost dbus[1124]: [system] Activating service name='com.redhat.SubscriptionManager' (using servicehelper)
Feb 20 11:21:19 localhost dbus-daemon: dbus[1124]: [system] Successfully activated service 'com.redhat.SubscriptionManager'
Feb 20 11:21:19 localhost dbus[1124]: [system] Successfully activated service 'com.redhat.SubscriptionManager'
Feb 20 11:30:01 localhost systemd: Starting Session 3 of user root.
Feb 20 11:30:01 localhost systemd: Started Session 3 of user root.
Feb 20 11:30:43 localhost systemd: Starting Cleanup of Temporary Directories...
Feb 20 11:30:43 localhost systemd: Started Cleanup of Temporary Directories.

刚刚咱们一起把会话窗口关闭了,这样的操作在传统远程控制中就一定会导致正在运行的命令也被终止,但在screen不间断会话服务中则不会这样,只需要先查看下刚刚离线的会话名称,然后尝试切换回来就可以继续工作了:

[root@linuxprobe ~]# screen -ls
There is a screen on:
 13469.linux (Detached)
1 Socket in /var/run/screen/S-root.
[root@linuxprobe ~]# screen -r linux
[root@linuxprobe ~]#
[root@linuxprobe ~]# tail -f /var/log/messages
Feb 20 11:20:01 localhost systemd: Starting Session 2 of user root.
Feb 20 11:20:01 localhost systemd: Started Session 2 of user root.
Feb 20 11:21:19 localhost dbus-daemon: dbus[1124]: [system] Activating service name='com.redhat.SubscriptionManager' (using servicehelper)
Feb 20 11:21:19 localhost dbus[1124]: [system] Activating service name='com.redhat.SubscriptionManager' (using servicehelper)
Feb 20 11:21:19 localhost dbus-daemon: dbus[1124]: [system] Successfully activated service 'com.redhat.SubscriptionManager'
Feb 20 11:21:19 localhost dbus[1124]: [system] Successfully activated service 'com.redhat.SubscriptionManager'
Feb 20 11:30:01 localhost systemd: Starting Session 3 of user root.
Feb 20 11:30:01 localhost systemd: Started Session 3 of user root.
Feb 20 11:30:43 localhost systemd: Starting Cleanup of Temporary Directories...
Feb 20 11:30:43 localhost systemd: Started Cleanup of Temporary Directories.
Feb 20 11:40:01 localhost systemd: Starting Session 4 of user root.
Feb 20 11:40:01 localhost systemd: Started Session 4 of user root.

当然如果咱们突然又想到了还有其他事情要做,也可以再多创建出几个会话窗口来一起使用,而如果这段时间内不会再使用某个会话窗口,可以把它设置为临时断开模式(detach),随后工作需要时再重新连接(attach)回来,这期间会话内的程序也会正常运行。

9.3.2 会话共享功能

screen命令不仅能够让使用者在极端情况下也不丢失对系统的远程控制,保证了生产环境远程工作的不间断性,而且还具有会话共享、分屏切割、会话锁定等等实用的功能。会话共享功能是一件很酷的事情,当多个用户同时用某个用户远程控制主机的时候,便可以把屏幕内容共享出来,也就是说每个人都可以看到相同的内容,拓扑如图9-13所示:

screen会话共享

图9-13 Screen实现会话共享功能流程拓扑

要实现会话共享功能,需要先通过客户终端A远程ssh连接到服务器主机端,并创建一个会话窗口:

[root@client A ~]# ssh 192.168.10.10
The authenticity of host '192.168.10.10 (192.168.10.10)' can't be established.
ECDSA key fingerprint is 70:3b:5d:37:96:7b:2e:a5:28:0d:7e:dc:47:6a:fe:5c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.10' (ECDSA) to the list of known hosts.
root@192.168.10.10's password: 
Last login: Wed May 4 07:56:29 2017
[root@client A ~]# screen -S linuxprobe
[root@client A ~]#

然后开启第二台客户终端B远程ssh连接到服务器主机端,执行获取远程会话的命令即可,马上两台主机就能看到相同的内容了:

[root@client B ~]# ssh 192.168.10.10
The authenticity of host '192.168.10.10 (192.168.10.10)' can't be established.
ECDSA key fingerprint is 70:3b:5d:37:96:7b:2e:a5:28:0d:7e:dc:47:6a:fe:5c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.10' (ECDSA) to the list of known hosts.
root@192.168.10.10's password: 
Last login: Wed Feb 22 04:55:38 2017 from 192.168.10.10
[root@client B ~]# screen -x 
[root@client B ~]

出现问题?大胆提问!

因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~

Linux技术交流请加A群:560843(),B群:340829(推荐),C群:463590(推荐),点此查看全国群

*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。

本章节的复习作业(答案就在问题的下一行哦,用鼠标选中即可看到的~)

1:在Linux系统中配置网卡网络参数有很多种方法,请尽量举例出您知道的:

答案:配置网卡参数可以使用nmtui命令、nmcli命令、nm-connection-editor命令、菜单中图形化界面工具或者直接编辑网卡配置文件来实现对网卡参数的修改。

2:在红帽RHEL7系统中使用网卡会话技术的目的是?

答案:使用nmcli管理网卡会话的目的是为了快速切换网卡参数,以便适应不同的工作场景。

3:简述网卡绑定技术mode6模式的作用及优势:

答案:平时两块网卡均工作,且自动备援,无须交换机设备支援。

4:在Linux系统中的一切都是文件,因此对服务程序的配置就是在修改其配置文件的参数,若想要让新的配置参数生效,还需要做什么操作?

答案:需要重新启动相关服务程序、或让服务程序重新加载配置文件、或重启服务端主机。

5:分析对比sshd服务的密码口令验证与密钥验证方式,您认为更安全的是那个?

答案:相同情况下一定是密钥验证更加安全,用户若对认证有更高的安全需求,还可以再对密钥文件进行口令加密,实现双重加密。

6:若想要把本地文件/root/out.txt传送到远程主机(192.168.10.20)的/home目录下,恰好两台主机均为Linux系统,最为简便的传送方式是?

答案:执行命令scp /root/out.txt root@192.168.10.20:/home进行口令验证后即可完成传送。

7:请您回忆并简述下配置YUM仓库的步骤:

答案:首先应该创建挂载目录并把光盘镜像设备与其关联,然后修改YUM的配置文件填写入相关参数,尤其需要注意挂载目录的存放路径要写对,最后便可使用yum命令来安装相关服务程序了。

8:Screen服务程序能够让用户实现远程控制的不间断会话服务,即便异常断网也能够不丢失对远程主机的会话控制,那么当咱们想要恢复到一个叫做linux的会话窗口中应该怎么做呢?

答案:执行命令screen -r linux即可切换到这个会话窗口中。