本章将介绍 SSH 协议与 sshd 服务程序的理论知识、Linux系统的远程管理以及在系统中配置服务程序的方法,演示基于密码与密钥验证的 sshd 服务程序进行远程访问,以及使用 Tmux 服务程序远程管理 Linux 系统的不间断会话等技术。并详细讲解日志系统的理论知识,使用 journalctl 命令基于各种条件进行日志信息的检索,以快速定位工作中的故障点。
9.1 配置网络服务
如何使用 nmtui 命令配置网卡参数,以及通过 nmcli 命令查看网络信息并管理网络会话服务,从而实现不同工作场景中快速地切换网络运行参数;或手工绑定round-robin(轮询)模式双网卡,实现网络的负载均衡。
9.1.1 配置网卡参数
Linux 系统上配置服务必须先保证主机之间能够顺畅地通信,如果网络不通,即便服务部署正确用户也无法顺利访问;在 RHEL 8 系统中至少有5种网络的配置方法,例如使用 nmtui
命令来配置网络,在命令行输入 nmtui 按回车就会弹出网络配置工具。
在 RHEL 5、6 系统及其他大多数早期的 Linux 系统中,网卡的名称一直都是 eth0、eth1、eth2、……;在 RHEL 7 中则变成了类似于 eno16777736 这样的名字;而在 RHEL 8 系统中网卡的最新名称是类似于 ens160、ens192 这样的,不过除了网卡的名称发生变化之外,其他一切几乎照旧。
选中 Edit a connection 回车键进入网络配置项,Tab/方向键移动选中需要编辑的项,填写 IP 地址 192.168.187.128/24。24 表示子网掩码中的前 24 位为网络号,后 8 位是主机号(与 255.255.255.0 的效果一样)。网关、DNS 等信息暂可不必填写,等用到时再补充。选中 Edit 进入。
IPv4 这里选 Manual(手动),再点右边 show 展开手动填IP地址。
然后键盘下键移动到右下角选 OK 就完成了,最后选中 Back 回去 Quit退出。
当修改完网络服务配置文件后,并不会立即产生效果。要想让服务程序获取到最新的配置文件,需要手动重启相应的服务,之后就可以测试网络或看一下网卡配置文件 /etc/sysconfig/network-scripts/ifcfg-ens160 有什么变化。
9.1.2 创建网络会话
RHEL 和 CentOS 系统默认使用 NetworkManager 来提供网络服务,这是一种动态管理网络配置的守护进程,能够让网络设备保持连接状态。可以使用 nmcli 命令来管理 NetworkManager 服务程序。nmcli 是一款基于命令行的网络配置工具,它可以轻松地查看网络信息或网络状态。
RHEL 8 系统支持网络会话功能,允许用户在多个配置文件中快速切换(非常类似于 firewalld 防火墙服务中的区域技术)。如果我们在公司网络中使用笔记本电脑时需要手动指定网络的 IP 地址,而回到家中则是使用 DHCP 自动分配 IP 地址,这就需要频繁的修改
IP 地址;如果使用了网络会话功能,只需在不同的使用环境激活相应的网络会话,就可以实现网络配置灵活切换。
下面使用 con-name 参数指定公司所使用的网络会话名称 work,用 ifname 参数指定网卡名称(以实际名称为准,比如我的是 ens160),用 autoconnect no 参数将网络会话设置为不自动激活,用 type 指定网络类型,用 ip4 及 gw4 参数手动指定网络的 IP 地址;
然后指定家庭所使用的网络会话名称 home。因为要从外部 DHCP 服务器自动获得 IP 地址,所以这里不需要进行手动指定 IP。在成功创建网络会话后,可以使用 nmcli 命令查看创建的所有网络会话。
使用 nmcli 命令配置过的网络会话是永久生效的,上班环境下用 connection up 启动 work 网络会话,网卡信息就自动配置好了;后续不需要网络会话时用 delete 命令就能删除。
9.1.3 绑定两块网卡
借助于网卡绑定技术,不仅能够提高网络传输速度,更重要的是可以确保在其中一块网卡出现故障时,依然可以正常提供网络服务。
下面在虚拟机系统中再添加一块网卡设备,请确保两块网卡都处在同一种网络连接模式中,相同模式的网卡设备才可以进行网卡绑定,否则这两块网卡无法互相传送数据。和添加硬盘一样找到虚拟机设置-添加-网络适配器-完成。
前面是使用 nmtui 命令来配置网络信息,这次我们使用 nmcli 命令来配置网卡设备的绑定参数。网卡绑定的理论知识类似于前面学习的 RAID 硬盘组,需要参与绑定的网卡设备逐个进行“初始设置”不再有各自的
IP 相关信息。在进行了初始设置之后,它们就可以支持网卡绑定。
1.创建出一个bond网卡
使用如下命令创建一个bond网卡。命令依次的意思是创建类型为bond(绑定)、名称为bond0、网卡名为bond0的绑定设备,绑定模式为balance-rr;其中 rr 是 round-robin 的缩写,全称为轮循模式。
round-robin 的特点是会根据设备顺序依次传输数据包,提供负载均衡的效果,而且一旦某个网卡发生故障,会马上切换到另外的网卡设备上,保证网络传输不被中断。
active-backup 是另外一种比较常用的网卡绑定模式,它的特点是平时只有一块网卡正常工作,另一块网卡随时待命,一旦工作中的网卡发生损坏,待命的网卡会自动顶替上去,因此也称为主备模式。
2.向bond0添加从属网卡
刚才创建成功的bond0设备当前仅仅是个名称,里面并没有真正能为用户传输数据的网卡设备,使用下面的命令把 ens160 和 ens192 网卡添加进来。con-name 参数后面接的是从属网卡的名称(可以随时设置);ifname 参数后面接的是两块网卡的名称。一定要以真实的网卡名称为准。
3.配置bond0设备的网卡信息
配置网络参数的方法有很多,为了让配置过程更加一致性,下面还是用 nmcli 命令依次配置网络的 IP 地址及子网掩码、网关、DNS、搜索域和手动配置等参数。
4.测试验证bond0
启用网卡看一下设备的详细列表;此时的主机由两块网卡在共同提供服务。可以在本地主机执行ping 192.168.10.10命令检查网络的连通性。为了检验网卡绑定技术的自动备援功能,可以突然在虚拟机硬件配置中随机移除一块网卡设备,
在+参数 -t 不停 ping 的期间移除一块网卡后, ping 值结果中居然没有看到丢包。
9.2 远程控制服务
SSH(Secure Shell)是一种能够以安全的方式提供远程登录的协议,也是目前远程管理Linux 系统的首选方式。此前一般使用 FTP 或 Telnet 来进行远程登录。但是因为它们以明文的形式在网络中传输账户密码和数据信息,很容易受到黑客发起的中间人攻J,轻则篡改传输的数据信息,重则直接抓取服务器的账户密码。
想要使用 SSH 协议来远程管理 Linux 系统,则需要配置 sshd 服务程序。sshd 是基于 SSH
协议开发的远程管理服务程序,不仅使用起来方便快捷,而且能够提供两种安全验证的方法:
➢ 基于密码的验证—用账户和密码来验证登录;
➢ 基于密钥的验证—需要在本地生成密钥对,然后把密钥对中的公钥上传至服务器,并与服务器中的公钥进行比较;该方式相较来说更安全。
9.2.1 配置 sshd 服务
Linux 系统中的一切皆文件,sshd 服务的配置信息保存在
/etc/ssh/sshd_config 文件中,配置文件中有许多以井号(#)开头的注释行,要想让这些配置参数生效,需要在修改参数后再去掉前面的 # 号。sshd 服务配置文件中包含的重要参数如图。
RHEL 8 系统中已经默认安装并启用了 sshd 服务程序;下面在客户端使用 ssh 命令远程连接服务器 192.168.187.128,其格式为“ssh [参数] 服务器 IP ”,要退出登录则执行 exit 命令,第一次访问时需要输入 yes 来确认对方主机的指纹信息。
如果禁止以 root 管理员的身份远程登录到服务器,则可以大大降低被黑客暴力破J密码的概率。下面使用 Vim 文本编辑器打开服务器上的 sshd 服务主配置文件 /etc/ssh/sshd_config,然后把第 46 行 #PermitRootLogin yes 参数前的井号(#)去掉,并把参数值 yes 改成 no,这样就不再允许 root 管理员远程登录了。记得最后 wq 保存并退出。
再次以 root 用户远程显示 denied 被否决。
在Windows 系统有许多远程工具,比如 Xshell、PuTTY、SecureCRT、SSH Secure Shell Client 等,这里用 Xshell 远程连接看看效果。ssh 配置文件改回 root 用户方便实验。
9.2.2 安全密钥验证
加密是对信息进行编码和解码的技术,它通过一定的算法(密钥)将原本能被直接阅读的明文信息转换成密文形式。密钥即是密文的钥匙,有私钥和公钥之分。在传输数据时,如果担心被他人监听或截获,就可以在传输前先使用公钥对数据加密处理,然后再进行传送。只有掌握私钥的用户才能解密这段数据,除此之外的其他人即便截获了数据,一般也很难将其破译为明文信息。
试着在客户端主机中输入 ssh-keygen 生成“密钥对”,第一行为储存的路径一般回车键保持默认,再下面会让输入2次密码以此来加密成密钥。继续上传密钥至服务器,由于客户端为 Windows 输入ssh-copy-id 命令无效,要改为 type $env:USERPROFILE.sshid_rsa.pub | ssh [root@192.168.187.128] “cat >> .ssh/authorized_keys”
回服务器进行设置使其只允许密钥验证,在大概73行 #PasswordAuthentication no 拒绝传统的密码验证方式。在修改配置文件后保存并重启 sshd 服务程序。客户端远程左边的 Xshell都不让输密码,右边有密钥的 Windows 成功远程。
9.2.3 远程传输命令
既然 SSH 协议可以让用户远程控制服务器、传输命令信息,那么是不是也能传输文件呢?
scp(secure copy)是一个基于 SSH 协议在网络之间进行安全传输的命令,其格式为“scp
[参数]本地文件 远程账户@远程 IP 地址:远程目录”。
第 2 章讲解的 cp 命令只能在本地硬盘中进行文件复制,而 scp 不仅能够通过网络传送数据,而且所有的数据都将进行加密处理。例如,如果想把一些文件通过网络从一台主机传递到其他主机,恰巧都是 Linux 系统,这时使用 scp 命令就可以轻松完成文件的传递了。scp 命令中可用的参数以及作用如图。
在使用 scp 命令把文件从本地复制到远程主机时,首先需要以绝对路径的形式写清本地文件的存放位置。如果要传送整个文件夹内的所有数据,还需要额外添加参数-r 进行递归操作;然后写上要传送到的远程主机的 IP 地址,远程服务器便会要求进行身份验证了。
如果想使用指定用户的身份进行验证,可使用用户名@主机地址的参数格式。最后需要在远程主机的 IP 地址后面添加冒号,并在后面输入需要存放的路径。由于 scp 命令是基于 SSH 协议进行文件传送的,设置好密钥验证在传输文件时不用密码;下图可见 Windows 上传到 RHEL8 的linux命令释意档,由于文本里有中文 ssh 远程登录 cat 查看到的内容乱码。
还可以反向操作下载远程主机上的文件到本地,Windows与Linux/的路径分隔符合正好相反。
9.3 不间断会话服务
Terminal Multiplexer(终端复用器,简称为 Tmux)是一款能够实现多窗口远程控制的开源服务程序。简单来说就是为了解决网络异常中断或为了同时控制多个远程终端窗口而设计的程序。用户还可以使用 Tmux 服务程序同时在多个远程会话中自由切换,能够实现如下功能。
➢
会话恢复:即便网络中断,也可让会话随时恢复,确保用户不会失去对远程会话的控制。
➢
多窗口:每个会话都是独立运行的,拥有各自独立的输入输出终端窗口,终端窗口内显示过的信息也将被分开隔离保存,以便下次使用时依然能看到之前的操作记录。
➢
会话共享:当多个用户同时登录到远程服务器时,便可以使用会话共享功能让用户之间的输入输出信息共享。
RHEL 8 系统中默认没有安装 Tmux 服务程序,因此需要配置软件仓库来安装它,BaseOS 和 AppStream 都要配置;在第4章里就做过了软件仓库配置,这里直接命令 dnf install tmux安装。
9.3.1 管理远程会话
直接敲击 tmux 命令进入会话窗口中,退出直接 exit ;可见会话窗口的底部出现了一条绿色的状态栏,里面分别显示的是会话编号、名称、主机名及系统时间。
会话窗口的编号是从 0 开始自动排序(即 0、1、2、3、……),会话窗口数量少的时候还没关系,数量多的时候区分起来就很麻烦了。接下来创建一个指定名称为 bak 的会话窗口。当敲下 tmux new -s bck 命令的一瞬间屏幕会快速闪动一下,这时就已经进入 Tmux 会话中了,在里面执行的任何操作都会被后台记录下来。
若想关闭会话窗口但后台进程不能被中断,此时便可以用
detach 参数将会话隐藏到后台;或者关闭窗口 close terminal,Tmux 服务程序会自动帮我们进行保存。这样操作之后,服务和进程都会一直在后台默默运行,不会因为窗口被关闭而造成数据丢失。
在传统的远程控制中,如果突然关闭会话窗口,一定会导致正在运行的命令也突然终止,但是在 Tmux 会话服务中则不会。怎么恢复刚刚的 bak 会话呢?直接 tmux attach -t [会话名称] 就可以。命令 tmux ls 可以看到后台的会话名称。类似关闭 Windows 微信之后在右下角再次打开。
如果不再需要使用这个 Tmux 会话了,可以使用 kill-session 命令杀死这个会话。 还可以直接使用 tmux new “vim me.txt”命令直接以 tnux 的形式编辑文档,这样命令中的一切操作都会被记录下来,当编辑完成保存后台会话也会自动结束。
9.3.2 管理多窗格
有时候一个 Shell 终端窗口总是不够用,这怎么办呢?Tmux 服务有个多窗格功能,能够把一个终端界面按照上下或左右进行切割,从而使得能同时做多件事情,而且之间互不打扰。首先得创建一个会话进入后使用如下命令。
使用“tmux split-window”命令可以创建上下切割的多窗格终端界面;
使用“tmux split-window -h”命令可以创建左右切割的多窗格终端界面;
创建多窗格终端界面后,我们同时做几件事情都不会乱了。如果觉得两个窗格还不够,那就再执行几次上面的命令吧,退出时执行 exit 命令即可。
当创建太多时窗格就会变得特别小,看不清输入内容了怎么办?可以同时按下“Ctrl + B +方向键”调整窗格的尺寸。例如,现在使用的窗格有些小,想向右扩大一些,则同时如下“Ctrl + B +右箭头键”就行了。
如果需要切换到其他窗格进行工作,但又不能关闭当前的窗格,则可使用如图所示的命令进行切换。
想调整窗格的位置,把上面与下面的窗格位置互换,则可以用如图所示的命令进行互换。
上面命令切换界面对于“键盘无影手”的人无所谓,但对其他人来说就有些麻烦了,实际上 Tmux 服务还提供了一系列快捷键来执行窗格的切换。方法是先同时按下 Ctrl+B 组合键松开,再迅速按下其他后续按键,而不是一起按下。用于操作会话窗格的常见快捷键如图。
9.3.3 会话共享功能
Tmux 服务不仅可以确保用户在极端情况下也不丢失对系统的远程控制,而且它还具有会话共享、分屏切割窗格、会话锁定等实用的功能。其中,会话共享功能是一件很酷的事情,当多个用户同时控制服务器的时候,它可以把服务器屏幕内容共享出来。也就是说,每个用户都能够看到相同的内容,还能一起同时操作。会话共享功能的技术拓扑如图
要实现会话共享功能,首先使用 ssh 服务将客户端 A 远程连接到服务器,随后使用 Tmux
服务创建一个共享会话窗口,名称随意为 :friend
然后客户端 B 也远程连接到服务器,并执行获取共享会话的命令 tmux attach-session -t friend,最后两台客户端就能看到相同的内容了。
9.4 检索日志信息
Linux 系统拥有十分强大且灵活的日志系统,用于保存几乎所有的操作记录和服务运行状态,并且按照“报错”“警告”“提示”和“其他”等标注进行了分类。运维管理员可以根据所需的信息进行检索,快速找出想要的信息,因此对于了解系统运行状态有着不错的帮助作用。
RHEL 8 系统中默认的日志服务程序是 rsyslog。可以将 rsyslog 理解成之前的 syslogd
服务的增强版本,它更加注重日志的安全性和性能指标。为了便于日后的检索,不同的日志信息会被写入到不同的文件中。在 Linux 系统中,常见的日志文件如图。
/var/log/message 这个综合性的文件用得最多。在处理 Linux 系统中出现的各种故障时,一般是最先发现故障的症状,而找到故障的原因则一定离不开日志信息的帮忙。
从理论上讲,日志文件分为下面 3 种类型。
➢
系统日志:主要记录系统的运行情况和内核信息。
➢
用户日志:主要记录用户的访问信息,包含用户名、终端名称、登入及退出时间、来源 IP 地址和执行过的操作等。
➢
程序日志:稍微大一些的服务一般都会保存一份与其同名的日志文件,里面记录着服务运行过程中各种事件的信息;每个服务程序都有自己独立的日志文件,且格式相差较大。
上面程序日志每个稍微大一些的服务都有自己独立的日志文件,为了让用户在检索信息时不至于特别麻烦,journalctl 命令应运而生。journalctl 命令用于检索和管理系统日志信息,英文全称为“journal control”,语法格式为“journalctl 参数”。它可以根据事件、类型、服务名称等信息进行信息检索,从而大大提高了日常排错的效率。journalctl 命令的常见参数如图。
试试用 journalctl -n 4 查看系统中最后 4 条日志信息;还可以使用-f 参数实时刷新日志的最新内容(这与第 2 章介绍的 tail -f /var/log/message
命令的效果相同)。
在 rsyslog 服务程序中,日志根据重要程度被分为 9 个等级,这样的好处是,我们可以直击最重要的信息,节省大量时间。
如果只想看系统中较高级别的报错信息,可以在 journalctl 命令中用 -p 参数进行指定。如 journalctl -p crit 。
还可以用–since 参数按照今日(today)、近 N 小时(hour)、指定时间范围的格式进行检索,找出最近的日志数据。如下仅查询今日的日志信息。
仅查询最近 1 小时的日志信息。
仅查询 12 点整到 15 点整的日志信息。
查询从 2023 年 5 月 1 日至 2023 年 5 月 11 日的日志信息。
最后查询一下指定服务的日志信息;在默认情况下所有的日志信息都是混在一起的,如果想看具体某项服务的日志信息,可以使用 -u 参数进行查询,服务名称的后面有“.service”,这是标准服务名称的写法。
服务器租用托管,机房租用托管,主机租用托管,https://www.e1idc.com