• 第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上做的任何操作,都可以实时同步到对方的屏幕上,真的很酷哦!

  • 相关阅读:
    ASP.NET中常用的33种代码
    AJAX与URL重写404错误解决方法
    在firefox上运行ajax网页时同步操作的问题
    AjaxPro使用说明
    (转)SQL语句优化的34条建议
    javascript 如何操作框架页中的域
    ASP.NET上传下载文件示例,使用webClient实现
    转载:缓存 Cache
    翻译 一些很酷的.Net技巧
    Firefox和IE之间7个JavaScript的差异
  • 原文地址:https://www.cnblogs.com/linux130/p/5748571.html
Copyright © 2020-2023  润新知