您的位置:首页 > 其它

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

2016-08-08 11:17 696 查看
章节简述:

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

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

本章目录结构

9.1 配置网卡连接网络

9.1.1 配置网卡参数

9.1.2 查看网卡信息

9.1.3 绑定两块网卡

9.1.4 查看端口状态

9.2 远程控制服务

9.2.1 了解sshd服务

9.2.2 使用ssh命令

9.2.3 安全密钥验证

9.2.4 远程传输命令

9.3 不间断会话服务

9.3.1 了解Screen服务

9.3.2 掌握命令参数

9.3.3 创建与使用会话功能

9.3.4 会话共享功能

[b]9.1 配置网卡连接网络[/b]
[b]9.1.1 配置网卡参数[/b]
本实验需要两台虚拟主机来完成,分别是:

编辑

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

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



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



第2步:选择要编辑的网卡。



第3步:编辑网卡信息。



第4步:将网卡的IPv4配置项设置成手动。



第5步:敲击Ipv4配置项右侧的(Show)。



第6步:填入IP地址信息。



第7步:敲击最下面的(OK)。



第8步:确认信息填写正确后退出。



第9步:再次运行网卡配置程序。



第10步:选择激活该网卡。



第11步:将此网卡成功的激活。



第12步:通信测试。



第13步:请使用"nmtui"工具配置后仍然需要修改网卡配置文件设置"ONBOOT=yes"。

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

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

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

查看网卡的配置信息:


[root@linuxprobe ~]# nmcli connection show


编辑

NAME(网卡名称)UUID(唯一识别码)TYPE(网卡类型)DEVICE(设备)
eno1677773613756690-ac77-b776-4fc1-f5535cee6f16802-3-etherneteno16777736
查看网卡的连接状态:


[root@linuxprobe ~]# nmcli device status


编辑

DEVICE(设备)TYPE(类型)STATE(状态)CONNECTION(连接)
eno16777736ethernetconnectedeno16777736
loloopbackunmanaged--
如果想看网卡设备"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(设备)
house03f366a3-04b6-4545-a996-f10d7bffbf64802-3-ethernet--
company3a6677a8-59b0-4c8a-ae15-2a9f3e502f33802-3-ethernet--
eno1677773613756690-ac77-b776-4fc1-f5535cee6f16802-3-etherneteno16777736
实用nmcli命令创建或修改的会话配置信息回自动保存为网卡配置文件,重启后依然有效。

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

第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

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

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

编辑

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

[root@linuxprobe ~]# ss -ntl

编辑

StateRecv-QSend-QLocal Address:PortPeer Address:Port
LISTEN0100127.0.0.1:25*:*
LISTEN0128*:55820*:*
LISTEN0100*:22*:*
LISTEN0128127.0.0.1:631*:*
LISTEN0128:::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
TransportTotalIPIPv6
*1173--
RAW000
UDP1385
TCP1055
INET231310
FRAG000
如果我们希望查看IP数据包从本机到另外一台电脑经过的路由信息,那就可以用tracepath命令啦!

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

[root@linuxprobe ~]# tracepath ***

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

出现问题?大胆提问!


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

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

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


[b]9.2 远程控制服务[/b]
[b]9.2.1 了解sshd服务[/b]
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 2SSH协议的版本号。
#HostKey /etc/ssh/ssh_host_keySSH协议版本为1时,私钥存放的位置。
HostKey /etc/ssh/ssh_host_rsa_keySSH协议版本为2时,RSA私钥存放的位置。
#HostKey /etc/ssh/ssh_host_dsa_keySSH协议版本为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

[b]9.2.2 使用ssh命令[/b]
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 ~]#

[b]9.2.3 安全密钥验证[/b]
使用密码验证终归会存在着被骇客暴力破解或嗅探监听的危险,其实也可以让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服务程序主配置文件。



第2步:将允许密码验证的参数设置为no。



第3步:将允许密钥验证的参数设置为yes。



第4步:保存并退出配置文件。



第5步:重启ssh服务程序后即可生效。

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

[root@linuxprobe ~]# ssh 192.168.10.20
Last login: Mon Apr 13 19:34:13 2015

[b]9.2.4 远程传输命令[/b]
要想将一些文件通过网络传送给其他主机,又恰好两台主机都是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


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

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


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

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

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


[b]9.3.2 掌握命令参数[/b]
红帽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会话删除。
[b]9.3.3 创建与使用会话功能[/b]
完成安装后直接运行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),那么即可重新控制会话窗口中运行的程序啦。

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



将两台Linux主机均连入同一个服务器:

在主机A的终端上执行创建会话的操作:

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

那么此时终端A与终端B上做的任何操作,都可以实时同步到对方的屏幕上,真的很酷哦!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: