第9章 使用ssh服务管理远程主机。

章节简述:

学习使用nmtui命令配置网卡参数、手工将多块网卡做绑定、使用nmcli命令查看网卡信息和使用ss命令查看网络及端口状态。

完整演示sshd服务配置方法并详细讲述每个参数的作用,实战基于密钥远程登陆实验以及用screen服务让远程会话不再终断

 

9.1 配置网卡连接网络
9.1.1 配置网卡参数

本实验需要两台虚拟主机来完成,分别是:

编辑
主机名称 操作系统 IP地址
本地主机 红帽RHEL7操作系统 192.168.10.10
远程主机 红帽RHEL7操作系统 192.168.10.20

在正式配置sshd服务之前,我们必须保证本地主机远程主机之间数据是可以互相传送的,前面在学习Vim编辑器的章节中修改过网卡文件,本次使用图形工具来配置网络,效果是一样的。

请您按照下面的幻灯片逐步操作,可点击图片两侧箭头或下方小圆点“○”切换步骤。

  • 第1步:执行命令“nmtui”。

使用nmtui工具配置完网卡后请一定要再修改配置文件设置成"ONBOOT=yes"。

当您按照上述步骤配置完网卡后在本地主机执行"ping 192.168.10.20"来检测网络是否已经配置妥当。

9.1.2 查看网卡信息

nmcli是一款能够方便我们配置网络的工具,能够轻松的查看网卡信息或网络状态:

查看网卡的配置信息:

[root@linuxprobe ~]# nmcli connection show

编辑
NAME(网卡名称) UUID(唯一识别码) TYPE(网卡类型) DEVICE(设备)
eno16777736 13756690-ac77-b776-4fc1-f5535cee6f16 802-3-ethernet eno16777736

查看网卡的连接状态:

[root@linuxprobe ~]# nmcli device status

编辑
DEVICE(设备) TYPE(类型) STATE(状态) CONNECTION(连接)
eno16777736 ethernet connected eno16777736
lo loopback unmanaged --

如果想看网卡设备"eno16777736"的详细信息,只需执行"nmcli con show eno16777736",信息相当详细哦!

对了!网卡还支持了简单实用的多会话功能了呢,例如将Linux系统安装到了笔记本上,上午拿到公司工作时是要指定IP地址,而晚上回到家是DHCP分配IP地址,这样改来改去真的很麻烦,所以我们可以设置多个网卡会话,在不同的环境激活就可以了,但每个网卡同时仅能有一个会话是激活状态的

我们可以将在公司的会话叫做"company",在家里的会话叫做"house",记住了哦,现在配置!
添加公司会话,参数为connection(会话),add(添加动作),con-name(会话名称),type(网卡类型),ifname(网卡名称):

[root@linuxprobe ~]# nmcli connection add con-name company type ethernet ifname eno16777736
Connection 'company' (3a6677a8-59b0-4c8a-ae15-2a9f3e502f33) successfully added.

添加居家会话:

[root@linuxprobe ~]# nmcli connection add con-name house ifname eno16777736 autoconnect no type ethernet ip4 192.168.10.10/24 gw4 192.168.10.1
Connection 'house' (03f366a3-04b6-4545-a996-f10d7bffbf64) successfully added.

启用居家会话:

[root@linuxprobe ~]# nmcli connection up house

查看会话的信息:

[root@linuxprobe ~]# nmcli connection show
编辑
NAME(名称) UUID(唯一标识符) TYPE (网卡类型) DEVICE(设备)
house 03f366a3-04b6-4545-a996-f10d7bffbf64 802-3-ethernet --
company 3a6677a8-59b0-4c8a-ae15-2a9f3e502f33 802-3-ethernet --
eno16777736 13756690-ac77-b776-4fc1-f5535cee6f16 802-3-ethernet eno16777736

实用nmcli命令创建或修改的会话配置信息回自动保存为网卡配置文件,重启后依然有效。

 

9.1.3 绑定两块网卡

我们可以将多块网卡多绑定操作,不仅能够提高带宽的速率而且让其中一块网卡出现故障时,不会让网络完全中断。

第1步:在虚拟机中额外添加一块网卡。

编辑虚拟机设置,添加网络适配器:
编辑虚拟机设置,添加网络适配器。

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

保证两块网卡的连接类型都是相同的
查看两块网卡的名称:

[root@linuxprobe ~]# ifconfig | grep flags
eno16777728: flags=4163>UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
eno33554968: flags=4163>UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

第2步:配置网卡的参数:

设置第1块网卡为从卡,而主卡为bond0:

[root@linuxprobe ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777728
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
DEVICE=eno16777728
MASTER=bond0
SLAVE=yes

相似的方法设置第2块网卡,主卡依然为bond0:

[root@linuxprobe ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno33554968
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
DEVICE=eno33554968
MASTER=bond0
SLAVE=yes

创建绑定网卡的配置文件并指定IP地址等信息:

[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步:让内核支持Bonding的驱动。

为bond0网卡添加bonding驱动的支持:

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

常用的绑定驱动模式有:
mode=0平衡负载模式:平时两块网卡均工作,且自动备援,采用Switch支援。
mode=1自动备援模式:平时只有一块网卡工作,故障后自动替换为另外的网卡。
mode=6:平衡负载模式:平时两块网卡均工作,且自动备援,无须设置Switch支援。

第4步:重新加载网卡后绑定即成功。

重新加载网卡信息:

[root@linuxprobe ~]# systemctl restart network
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

eno16777728: 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
9.1.4 查看端口状态

有经验的管理员都会在配置网卡后顺手执行一条ping命令来检测网络的可用性,并且以前大家习惯用netstat命令查看本机的端口连接状态,这条命令也已经在红帽RHEL7系统中则被效率更高显示信息更多的ss命令替代了。

ss命令用于查看本机的端口连接状态,具体的参数:

编辑
参数 作用
-a 显示所有的套接字
-l 显示所有连接状态的套接字
-e 显示详细的套接字信息
-m 显示套接字的内存使用情况
-p 显示套接字的进程信息
-4 显示ipv4的套接字信息
-6 显示ipv6的套接字信息
-t 仅显示tcp的套接字信息
-u 仅显示udp的套接字信息
-n 不解析主机名(提升速度)
-s 查看概述

查看监听状态中的套接字:

[root@linuxprobe ~]# ss -ntl
编辑
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 *:55820 *:*
LISTEN 0 100 *:22 *:*
LISTEN 0 128 127.0.0.1:631 *:*
LISTEN 0 128 :::60863 *:*

查看进程名和PID号码:

[root@linuxprobe ~]# ss -s
编辑
Total: 1091 (kernel 1173)
TCP: 11 (estab 0, closed 1, orphaned 0, synrecv 0, timewait 0/0), ports 0
Transport Total IP IPv6
* 1173 - -
RAW 0 0 0
UDP 13 8 5
TCP 10 5 5
INET 23 13 10
FRAG 0 0 0

如果我们希望查看IP数据包从本机到另外一台电脑经过的路由信息,那就可以用tracepath命令啦!

这里格式非常简单:"tracepath 目标地址(域名或IP地址均可)",确实没什么可讲。

[root@linuxprobe ~]# tracepath www.linuxprobe.com

追踪从本地主机到《Linux就该这么学》的服务器中数据包经过了那些路由器,般来讲路由跳数越少,延时越低,访问速度越快哦!
出现问题?大胆提问!

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

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

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

9.2 远程控制服务
9.2.1 了解sshd服务

SSH(Secure Shell)是一种能够提供安全远程登陆会话的协议,假如希望在远程Linux系统中执行命令,就是通过这个协议啦!

为什么要强调SSH协议是安全的呢?因为比如ftp、telnet等服务在网络上不会对口令或数据进行加密,那么骇客们真的非常容易就可以截获这些信息(尤其是同局域网内的用户),因此它们在本质是就是不安全的。

sshd服务提供两种安全验证的方法:

基于口令的安全验证:经过验证帐号与密码即可登陆到远程主机。

基于密钥的安全验证:需要在本地生成"密钥对"后将公钥传送至服务端,进行公共密钥的比较。

sshd服务的配置文件解析:

[root@linuxprobe ~]# cat /etc/ssh/sshd_config

编辑
参数 作用
#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 是否允许空密码登陆(很不安全)

若您想要修改服务的配置参数,请一定要记得删除参数前面的注释符"#"并重启服务才生效的。

在远程主机上启动sshd服务并加入到开机启动项:

[root@localhost ~]# systemctl start sshd
[root@localhost ~]# systemctl enable sshd
9.2.2 使用ssh命令

ssh命令用于远程管理Linux主机,格式为:“ssh [参数] 主机”。

编辑
参数 作用
-p 指定连接端口(默认为22)
-v 显示连接过程的详细信息
[root@localhost ~]# 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 2015 from 192.168.10.10
[root@localhost ~]#
9.2.3 安全密钥验证

使用密码验证终归会存在着被骇客暴力破解嗅探监听的危险,其实也可以让ssh服务基于密钥进行安全验证可无需密码验证)。

第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              |
+-----------------+

将生成好的公钥密钥传送至远程主机:

[root@linuxprobe ~]# ssh-copy-id 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
/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.20's password:

Number of key(s) added: 1

Now try logging into the machine, with: "ssh '192.168.10.20'"
and check to make sure that only the key(s) you wanted were added.

第2步:首先要在远程主机中修改sshd服务的配置文件(修改后记得重启服务):

请您按照下面的幻灯片逐步操作,可点击图片两侧箭头或下方小圆点“○”切换步骤。

  • 第1步:编辑ssh服务程序主配置文件。

第3步:最后来尝试无需密码的远程登录吧:

[root@linuxprobe ~]# ssh 192.168.10.20
Last login: Mon Apr 13 19:34:13 2015
9.2.4 远程传输命令

要想将一些文件通过网络传送给其他主机,又恰好两台主机都是Linux系统,我们便可以直接用scp命令传输文件到另外一台主机~

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

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

将本地文件/root/out.txt传送到远程主机的/home目录:

[root@linuxprobe ~]# scp /root/out.txt 192.168.10.20:/home
root@192.168.10.20's password:此处输入远程主机中root用户的密码
out.txt 100% 0 0.0KB/s 00:00

传送下文件夹并指定远程用户:

[root@linuxprobe ~]# scp -r results/ linuxprobe@192.168.10.20:/home
linuxprobe@192.168.10.20's password:此处输入远程主机中linuxprobe用户的密码

强大的scp命令还可以将远程主机的文件传输到本地呢,格式为"scp [参数] 远程用户@远程IP地址:远程文件 本地目录"。

将远程主机的/etc/issue.net文件下载到本地的/root目录:

[root@linuxprobe ~]# scp linuxprobe@192.168.10.20:/etc/issue.net /root
linuxprobe@192.168.10.20's password:
issue.net 100% 22 0.0KB/s 00:00

 

9.3 不间断会话服务
9.3.1 了解Screen服务

学完了ssh服务后有没有发现一个很重要的事情——当连接的终端被关闭时,运行在服务器上的命令也会中断。如果有长时间文件备份或FTP传输等任务时,通常我们都会新开一个连接窗口再继续工作,并且中途不能关闭窗口或断开链接(也包括网络不稳定的情况),否则这个任务就会被中断,还要重新开始。

Screen便是为了解决上述问题而设计的,用户可以通过使用Screen命令同时控制多个命令行会话并自由切换,特点有:

会话恢复:即便网络中断,也可让会话随时恢复,用户不会失去对命令行的控制。

多窗口:每个会话都是独立运行的,拥有独立的编号、输入输出和窗口缓存。

会话共享:可以使多个用户从不同终端使用同一个会话,也可让他们看到完全相同的输出。

9.3.2 掌握命令参数

红帽RHEL7系统中默认没有包含screen,需要先来安装。

使用yum命令安装screen程序包:

[root@linuxprobe ~]# yum install screen
Loaded plugins: langpacks, product-id, subscription-manager
………………省略部分安装信息………………
Installing:
screen x86_64 4.1.0-0.19.20120314git3c2946.el7 rhel7 551 k
………………省略部分安装信息………………
Complete!

screen命令的常用命令参数包括:

编辑
参数 作用
-A 让所有视窗自动调整适应当前终端机的大小。
-d <会话名称> 将指定的screen会话离线。
-r<会话名称> 将指定的screen会话恢复。
-h<行数> 指定视窗的缓冲区行数。
-S<会话名称> 指定screen会话的名称
-x 恢复所有离线的会话。
-ls或-list 显示当前的screen会话。
--wipe 自动将无法使用的screen会话删除。
9.3.3 创建与使用会话功能

完成安装后直接运行screen即可使用服务,推荐为每个会话都取一个名字,方便分辨。
创建名称为backup的会话:

[root@linuxprobe ~]# screen -S backup

查看当前已经存在的会话:

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

当执行screen命令后会调用系统默认的shell(通常即bash),所以敲完screen命令后会立即返回一个命令提示符,虽然看起来与刚刚没有变化,但此时你已经进入screen会话啦!

创建一个会话,初始为用vim编辑器写文件:

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

退出vim后会话也会被自动被删除:

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

新建一个叫做linuxprobe的会话:

[root@linuxprobe ~]# screen -S linuxprobe

列出当前所有会话(有两个哦):

[root@linuxprobe ~]# screen --ls
There are screens on:
32403.linuxprobe (Attached)
32230.backup (Attached)
2 Sockets in /var/run/screen/S-root.

回到backup会话中:

[root@linuxprobe ~]# screen -r backup

将linuxprobe会话离线:

[root@linuxprobe ~]# screen -d linuxprobe
[remote detached from 32403.linuxprobe]

再次查看会话状态(linuxprobe已经被离线了):

[root@linuxprobe ~]# screen -ls
There are screens on:
32403.linuxprobe (Detached)
32230.backup (Attached)
2 Sockets in /var/run/screen/S-root.

将当前会话离线并回到linuxprobe会话中:

[root@linuxprobe ~]# screen -d -r linuxprobe
[32403.linuxprobe detached.]

回到linuxprobe会话后,状态又改变了:

[root@linuxprobe ~]# screen -ls
There are screens on:
32403.linuxprobe (Attached)
32230.backup (Attached)
2 Sockets in /var/run/screen/S-root.

总结来说:将screen会话甚至为暂时断开(detach),那么会话窗口中的程序依然会执行。随后将会话重新连接(attach),那么即可重新控制会话窗口中运行的程序啦。

9.3.4 会话共享功能

会话共享功能是一件很酷的事,它让多个用户同时使用某一个会话,甚至让您和对方看到相同的终端内容,拓扑如下:

screen会话共享

将两台Linux主机均连入同一个服务器:
在主机A的终端上执行创建会话的操作:

[root@linuxprobe ~]# screen -S linuxprobe
在主机B的终端上同步会话信息:
[root@linuxprobe ~]# screen -x

那么此时终端A与终端B上做的任何操作,都可以实时同步到对方的屏幕上,真的很酷哦!

posted @ 2016-08-08 11:17  冯琪  阅读(978)  评论(0编辑  收藏  举报