Linux就該這么學》最新正式版已出版上市,同學們可在線上京東網當當網淘寶網亞馬遜等電商平臺購買。

*亦可就近在新華書店購買*

章節簡述:?

本章講解了如何使用nmtui命令配置網絡參數,以及通過nmcli命令查看網絡信息并管理網絡會話服務,從而讓您能夠在不同工作場景中快速地切換網絡運行參數;還講解了如何手工綁定mode6模式雙網卡,實現網絡的負載均衡。。

本章還深入介紹了SSH協議與sshd服務程序的理論知識、Linux系統的遠程管理方法以及在系統中配置服務程序的方法,并采用實驗的形式演示了使用基于密碼驗證的sshd服務程序進行遠程登錄,以及使用screen服務程序遠程管理Linux系統的不間斷會話等技術。

當讀者掌握了本章的內容之后,也就完全具備了對Linux系統進行配置管理的知識。而且后續章節中將陸續引入大量實用服務的配置內容,讀者將用到本章學習的知識進行配置,這樣一方面可以讓讀者對生產環境中用到的大多數熱門服務程序有一個廣泛且深入的認識,另一方面也可以掌握相應的配置方法。

9.1 配置網卡服務
9.1.1 配置網卡參數

截至目前,大家已經完全可以利用當前所學的知識來管理Linux系統了。當然,大家的水平完全可以更進一步,當有朝一日登頂技術巔峰時,您一定會感謝現在正在努力學習的您。

我們接下來將學習如何在Linux系統上配置服務。但是在此之前,必須先保證主機之間能夠順暢地通信。如果網絡不通,即便服務部署得再正確用戶也無法順利訪問,所以,配置網絡并確保網絡的連通性是學習部署Linux服務之前的最后一個重要知識點。

在4.1.3小節講解了如何使用Vim文本編輯器來配置網絡參數,其實,在RHEL 7系統中有至少5種網絡的配置方法,劉遄老師盡量在本書中為大家逐一演示。這里教給大家的是使用nmtui命令來配置網絡,其具體的配置步驟如圖9-1至圖9-8所示。當遇到不容易理解的內容時,我們會額外進行解釋說明。

圖9-1? 執行nmtui命令運行網絡配置工具

圖9-2? 選中Edit a connection并按下回車鍵

在RHEL 5、RHEL 6系統及其他大多數早期的Linux系統中,網卡的名稱一直都是eth0、eth1、eth2、……,但在RHEL 7中則變成了類似于eno16777736這樣的名字。不過除了網卡的名稱發生變化之外,其他幾乎一切照舊,因此這里演示的網絡配置實驗完全可以適用于各種版本的Linux系統。

圖9-3? 選中要編輯的網卡名稱,然后按下Edit(編輯)按鈕

圖9-4? 把網絡IPv4的配置方式改成Manual(手動)

再多提一句,我們的這本《Linux就該這么學》不僅學習門檻低、簡單易懂,而且還有一個潛在的優勢—書中所有的服務器主機IP地址均為192.168.10.10,而客戶端主機均為192.168.10.20及192.168.10.30。這樣的好處就是,在后面部署Linux服務的時候,不用每次都要考慮IP地址變化的問題,從而可以心無旁騖地關注配置細節。

圖9-5? 按下Show(顯示)按鈕,顯示信息配置框

現在,在服務器主機的網絡配置信息中填寫IP地址192.168.10.10/24。

圖9-6? 填寫IP地址

至此,在Linux系統中配置網絡的步驟就結束了。

劉遄老師在培訓時經常會發現,很多學員在安裝RHEL 7系統時默認沒有激活網卡。如果各位讀者有同樣的情況也不用擔心,只需使用Vim編輯器將網卡配置文件中的ONBOOT參數修改成yes,這樣在系統重啟后網卡就被激活了。

圖9-7? 單擊OK按鈕保存配置

圖9-8? 單擊Quit按鈕退出

[[email protected] ~]# 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系統中的服務配置文件后,并不會對服務程序立即產生效果。要想讓服務程序獲取到最新的配置文件,需要手動重啟相應的服務,之后就可以看到網絡暢通了:

[[email protected] ~]# systemctl restart network
[[email protected] ~]# 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命令來管理Network Manager服務。nmcli是一款基于命令行的網絡配置工具,功能豐富,參數眾多。它可以輕松地查看網絡信息或網絡狀態:

[[email protected] ~]# nmcli connection show
NAME UUID TYPE DEVICE 
eno16777736 ec77579b-2ced-481f-9c09-f562b321e268 802-3-ethernet eno16777736 
[[email protected] ~]# 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防火墻服務中的區域技術)。如果我們在公司網絡中使用筆記本電腦時需要手動指定網絡的IP地址,而回到家中則是使用DHCP自動分配IP地址。這就需要麻煩地頻繁修改IP地址,但是使用了網絡會話功能后一切就簡單多了—只需在不同的使用環境中激活相應的網絡會話,就可以實現網絡配置信息的自動切換了。

可以使用nmcli命令并按照“connection add con-name type ifname”的格式來創建網絡會話。假設將公司網絡中的網絡會話稱之為company,將家庭網絡中的網絡會話稱之為house,現在依次創建各自的網絡會話。

使用con-name參數指定公司所使用的網絡會話名稱company,然后依次用ifname參數指定本機的網卡名稱(千萬要以實際環境為準,不要照抄書上的eno16777736),用autoconnect no參數設置該網絡會話默認不被自動激活,以及用ip4及gw4參數手動指定網絡的IP地址:

[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.

使用con-name參數指定家庭所使用的網絡會話名稱house。因為我們想從外部DHCP服務器自動獲得IP地址,因此這里不需要進行手動指定。

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

在成功創建網絡會話后,可以使用nmcli命令查看創建的所有網絡會話:

[[email protected] ~]# 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網絡會話,網卡就能自動通過DHCP獲取到IP地址了。

[[email protected] ~]# nmcli connection up house 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)
[[email protected] ~]# 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-9所示。然后重啟虛擬機系統即可。

圖9-9? 設置虛擬機網卡的模式

9.1.3 綁定兩塊網卡

一般來講,生產環境必須提供7×24小時的網絡傳輸服務。借助于網卡綁定技術,不僅可以提高網絡傳輸速度,更重要的是,還可以確保在其中一塊網卡出現故障時,依然可以正常提供網絡服務。假設我們對兩塊網卡實施了綁定技術,這樣在正常工作中它們會共同傳輸數據,使得網絡傳輸的速度變得更快;而且即使有一塊網卡突然出現了故障,另外一塊網卡便會立即自動頂替上去,保證數據傳輸不會中斷。

下面我們來看一下如何綁定網卡。

第1步:在虛擬機系統中再添加一塊網卡設備,請確保兩塊網卡都處在同一個網絡連接中(即網卡模式相同),如圖9-10和圖9-11所示。處于相同模式的網卡設備才可以進行網卡綁定,否則這兩塊網卡無法互相傳送數據。

編輯虛擬機設置,添加網絡適配器。

圖9-10? 在虛擬機中再添加一塊網卡設備

保證兩塊網卡的連接類型都是相同的

圖9-11? 確保兩塊網卡處在同一個網絡連接中(即網卡模式相同)

第2步:使用Vim文本編輯器來配置網卡設備的綁定參數。網卡綁定的理論知識類似于前面學習的RAID硬盤組,我們需要對參與綁定的網卡設備逐個進行“初始設置”。需要注意的是,這些原本獨立的網卡設備此時需要被配置成為一塊“從屬”網卡,服務于“主”網卡,不應該再有自己的IP地址等信息。在進行了初始設置之后,它們就可以支持網卡綁定。

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

還需要將綁定后的設備命名為bond0并把IP地址等信息填寫進去,這樣當用戶訪問相應服務的時候,實際上就是由這兩塊網卡設備在共同提供服務。

[[email protected] ~]# 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步:讓Linux內核支持網卡綁定驅動。常見的網卡綁定驅動有三種模式—mode0、mode1和mode6。下面以綁定兩塊網卡為例,講解使用的情景。

mode0(平衡負載模式):平時兩塊網卡均工作,且自動備援,但需要在與服務器本地網卡相連的交換機設備上進行端口聚合來支持綁定技術。

mode1(自動備援模式):平時只有一塊網卡工作,在它故障后自動替換為另外的網卡。

mode6(平衡負載模式):平時兩塊網卡均工作,且自動備援,無須交換機設備提供輔助支持。

比如有一臺用于提供NFS或者samba服務的文件服務器,它所能提供的最大網絡傳輸速度為100Mbit/s,但是訪問該服務器的用戶數量特別多,那么它的訪問壓力一定很大。在生產環境中,網絡的可靠性是極為重要的,而且網絡的傳輸速度也必須得以保證。針對這樣的情況,比較好的選擇就是mode6網卡綁定驅動模式了。因為mode6能夠讓兩塊網卡同時一起工作,當其中一塊網卡出現故障后能自動備援,且無需交換機設備支援,從而提供了可靠的網絡傳輸保障。

下面使用Vim文本編輯器創建一個用于網卡綁定的驅動文件,使得綁定后的bond0網卡設備能夠支持綁定技術(bonding);同時定義網卡以mode6模式進行綁定,且出現故障時自動切換的時間為100毫秒。

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

第4步:重啟網絡服務后網卡綁定操作即可成功。正常情況下只有bond0網卡設備才會有IP地址等信息:

[[email protected] ~]# systemctl restart network
[[email protected] ~]# 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個數據丟包)。然后另外一塊網卡會繼續為用戶提供服務。

[[email protected] ~]# 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服務配置文件中包含的重要參數如表9-1所示。

表9-1????????????????????????????????? sshd服務配置文件中包含的參數以及作用

參數 作用
Port 22 默認的sshd服務端口
ListenAddress 0.0.0.0 設定sshd服務器監聽的IP地址
Protocol 2 SSH協議的版本號
HostKey /tc/ssh/ssh_host_key SSH協議版本為1時,DES私鑰存放的位置
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 是否允許空密碼登錄(很不安全)

在RHEL 7系統中,已經默認安裝并啟用了sshd服務程序。接下來使用ssh命令進行遠程連接,其格式為“ssh [參數] 主機IP地址”。要退出登錄則執行exit命令。

[[email protected] ~]# 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 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.10' (ECDSA) to the list of known hosts.
[email protected]'s password:此處輸入遠程主機root管理員的密碼
Last login: Wed Apr 15 15:54:21 2017 from 192.168.10.10
[[email protected] ~]# 
[[email protected] ~]# exit
logout
Connection to 192.168.10.10 closed.

如果禁止以root管理員的身份遠程登錄到服務器,則可以大大降低被黑客暴力破解密碼的幾率。下面進行相應配置。首先使用Vim文本編輯器打開sshd服務的主配置文件,然后把第48行#PermitRootLogin yes參數前的井號(#)去掉,并把參數值yes改成no,這樣就不再允許root管理員遠程登錄了。記得最后保存文件并退出。

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

再次提醒的是,一般的服務程序并不會在配置文件修改之后立即獲得最新的參數。如果想讓新配置文件生效,則需要手動重啟相應的服務程序。最好也將這個服務程序加入到開機啟動項中,這樣系統在下一次啟動時,該服務程序便會自動運行,繼續為用戶提供服務。

[[email protected] ~]# systemctl restart sshd
[[email protected] ~]# systemctl enable sshd

這樣一來,當root管理員再來嘗試訪問sshd服務程序時,系統會提示不可訪問的錯誤信息。雖然sshd服務程序的參數相對比較簡單,但這就是在Linux系統中配置服務程序的正確方法。大家要做的是舉一反三、活學活用,這樣即便以后遇到了陌生的服務,也一樣可以搞定了。

[[email protected] ~]# ssh 192.168.10.10
[email protected]'s password:此處輸入遠程主機root用戶的密碼
Permission denied, please try again.
9.2.2 安全密鑰驗證

加密是對信息進行編碼和解碼的技術,它通過一定的算法(密鑰)將原本可以直接閱讀的明文信息轉換成密文形式。密鑰即是密文的鑰匙,有私鑰和公鑰之分。在傳輸數據時,如果擔心被他人監聽或截獲,就可以在傳輸前先使用公鑰對數據加密處理,然后再行傳送。這樣,只有掌握私鑰的用戶才能解密這段數據,除此之外的其他人即便截獲了數據,一般也很難將其破譯為明文信息。

一言以蔽之,在生產環境中使用密碼進行口令驗證終歸存在著被暴力破解或嗅探截獲的風險。如果正確配置了密鑰驗證方式,那么sshd服務程序將更加安全。我們下面進行具體的配置,其步驟如下。

第1步:在客戶端主機中生成“密鑰對”。

[[email protected] ~]# 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.
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 [email protected]
The key's randomart image is:
+--[ RSA 2048]----+
|+*..o .          |
|*.o  +           |
|o*    .          |
|+ .    .         |
|o..     S        |
|.. +             |
|. =              |
|E+ .             |
|+.o              |
+-----------------+

第2步:把客戶端主機中生成的公鑰文件傳送至遠程主機:

[[email protected] ~]# 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
[email protected]'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服務程序。

[[email protected] ~]# 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 
 ………………省略部分輸出信息………………
[[email protected] ~]# systemctl restart sshd

第4步:在客戶端嘗試登錄到服務器,此時無須輸入密碼也可成功登錄。

[[email protected]be ~]# ssh 192.168.10.10
Last login: Mon Apr 13 19:34:13 2017
9.2.3 遠程傳輸命令

scp(secure copy)是一個基于SSH協議在網絡之間進行安全傳輸的命令,其格式為“scp [參數] 本地文件 遠程帳戶@遠程IP地址:遠程目錄”。

與第2章講解的cp命令不同,cp命令只能在本地硬盤中進行文件復制,而scp不僅能夠通過網絡傳送數據,而且所有的數據都將進行加密處理。例如,如果想把一些文件通過網絡從一臺主機傳遞到其他主機,這兩臺主機又恰巧是Linux系統,這時使用scp命令就可以輕松完成文件的傳遞了。scp命令中可用的參數以及作用如表9-2所示。

表9-2???????????????????????????????????????????? scp命令中可用的參數及作用

參數 作用
-v 顯示詳細的連接進度
-P 指定遠程主機的sshd端口號
-r 用于傳送文件夾
-6 使用IPv6協議

在使用scp命令把文件從本地復制到遠程主機時,首先需要以絕對路徑的形式寫清本地文件的存放位置。如果要傳送整個文件夾內的所有數據,還需要額外添加參數-r進行遞歸操作。然后寫上要傳送到的遠程主機的IP地址,遠程服務器便會要求進行身份驗證了。當前用戶名稱為root,而密碼則為遠程服務器的密碼。如果想使用指定用戶的身份進行驗證,可使用用戶名@主機地址的參數格式。最后需要在遠程主機的IP地址后面添加冒號,并在后面寫上要傳送到遠程主機的哪個文件夾中。只要參數正確并且成功驗證了用戶身份,即可開始傳送工作。由于scp命令是基于SSH協議進行文件傳送的,而9.2.2小節又設置好了密鑰驗證,因此當前在傳輸文件時,并不需要賬戶和密碼。

[[email protected] ~]# echo "Welcome to LinuxProbe.Com" > readme.txt
[[email protected] ~]# scp /root/readme.txt 192.168.10.20:/home
[email protected]'s password:此處輸入遠程服務器中root管理員的密碼
readme.txt 100% 26 0.0KB/s 00:00

此外,還可以使用scp命令把遠程主機上的文件下載到本地主機,其命令格式為“scp [參數] 遠程用戶@遠程IP地址:遠程文件 本地目錄”。例如,可以把遠程主機的系統版本信息文件下載過來,這樣就無須先登錄遠程主機,再進行文件傳送了,也就省去了很多周折。

[[email protected] ~]# scp 192.168.10.20:/etc/redhat-release /root
[email protected]'s password:此處輸入遠程服務器中root管理員的密碼
redhat-release 100% 52 0.1KB/s 00:00 
[[email protected] ~]# cat redhat-release 
Red Hat Enterprise Linux Server release 7.0 (Maipo)
9.3 不間斷會話服務

大家在學習sshd服務時,不知有沒有注意到這樣一個事情:當與遠程主機的會話被關閉時,在遠程主機上運行的命令也隨之被中斷。

如果我們正在使用命令來打包文件,或者正在使用腳本安裝某個服務程序,中途是絕對不能關閉在本地打開的終端窗口或斷開網絡鏈接的,甚至是網速的波動都有可能導致任務中斷,此時只能重新進行遠程鏈接并重新開始任務。還有些時候,我們正在執行文件打包操作,同時又想用腳本來安裝某個服務程序,這時會因為打包操作的輸出信息占滿用戶的屏幕界面,而只能再打開一個執行遠程會話的終端窗口,時間久了,難免會忘記這些打開的終端窗口是做什么用的了。

screen是一款能夠實現多窗口遠程控制的開源服務程序,簡單來說就是為了解決網絡異常中斷或為了同時控制多個遠程終端窗口而設計的程序。用戶還可以使用screen服務程序同時在多個遠程會話中自由切換,能夠做到實現如下功能。

會話恢復:即便網絡中斷,也可讓會話隨時恢復,確保用戶不會失去對遠程會話的控制。

多窗口:每個會話都是獨立運行的,擁有各自獨立的輸入輸出終端窗口,終端窗口內顯示過的信息也將被分開隔離保存,以便下次使用時依然能看到之前的操作記錄。

會話共享:當多個用戶同時登錄到遠程服務器時,便可以使用會話共享功能讓用戶之間的輸入輸出信息共享。

在RHEL 7系統中,沒有默認安裝screen服務程序,因此需要配置Yum倉庫來安裝它。首先將虛擬機的CD/DVD光盤選項設置為“使用ISO鏡像文件”,并選擇已經下載好的系統鏡像,如圖9-12所示。

隨書配套的軟件資源請在這里下載:http://www.52437949.com/tools/

RedHatEnterpriseLinux [RHEL]7.0——紅帽操作系統(必需)

由開源軟件及全球服務性系統開發商紅帽公司出品,最穩定出色的Linux操作系統。

培訓課程介紹視頻:http://www.52437949.com/training

確認光盤已被選中

圖9-12? 將虛擬機的光盤設備指向ISO鏡像

然后,把光盤設備中的系統鏡像掛載到/media/cdrom目錄。

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

最后,使用Vim文本編輯器創建Yum倉庫的配置文件。下述命令中用到的具體參數的含義,可參考4.1.4小節。

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

現在,就可以使用Yum倉庫來安裝screen服務程序了。簡捷起見,劉遄老師將對后面章節中出現的Yum軟件安裝信息進行過濾—把重復性高及無意義的非必要信息省略。

[[email protected] ~]# 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服務會話中了,在里面運行的任何操作都會被后臺記錄下來。

[[email protected] ~]# screen -S backup
[[email protected] ~]#?

執行命令后會立即返回一個提示符。雖然看起來與剛才沒有不同,但實際上可以查看到當前的會話正在工作中。

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

要想退出一個會話也十分簡單,只需在命令行中執行exit命令即可。

[[email protected] ~]# exit
[screen is terminating]

在日常的生產環境中,其實并不是必須先創建會話,然后再開始工作。可以直接使用screen命令執行要運行的命令,這樣在命令中的一切操作也都會被記錄下來,當命令執行結束后screen會話也會自動結束。

[[email protected] ~]# screen vim memo.txt
welcome to linuxprobe.com

為了演示screen不間斷會話服務的強大之處,我們先來創建一個名為linux的會話,然后強行把窗口關閉掉(這與進行遠程連接時突然斷網具有相同的效果):

[[email protected] ~]# screen -S linux
[[email protected] ~]# 
[[email protected] ~]# 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不間斷會話服務中則不會這樣。我們只需查看一下剛剛離線的會話名稱,然后嘗試恢復回來就可以繼續工作了:

[[email protected]?~]# screen -ls
There is a screen on:
 13469.linux (Detached)
1 Socket in /var/run/screen/S-root.
[[email protected] ~]# screen -r?linux
[[email protected]e ~]#
[[email protected] ~]# 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命令不僅可以確保用戶在極端情況下也不丟失對系統的遠程控制,保證了生產環境中遠程工作的不間斷性,而且它還具有會話共享、分屏切割、會話鎖定等實用的功能。其中,會話共享功能是一件很酷的事情,當多個用戶同時控制主機的時候,它可以把屏幕內容共享出來,也就是說每個用戶都可以看到相同的內容。

screen的會話共享功能的流程拓撲如圖9-13所示。

screen會話共享

圖9-13? 會話共享功能的流程拓撲

要實現會話共享功能,首先使用ssh服務程序將終端A遠程連接到服務器,并創建一個會話窗口。

[[email protected] 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.
[email protected]'s password:此處輸入root管理員密碼
Last login: Wed May 4 07:56:29 2017
[[email protected] A ~]# screen -S linuxprobe
[[email protected] A ~]#

然后,使用ssh服務程序將終端B遠程連接到服務器,并執行獲取遠程會話的命令。接下來,兩臺主機就能看到相同的內容了。

[[email protected] 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.
[email protected]'s password:此處輸入root管理員密碼
Last login: Wed Feb 22 04:55:38 2017 from 192.168.10.10
[[email protected] B ~]# screen -x 
[[email protected] B ~]

出現問題?大膽提問!

因讀者們硬件不同或操作錯誤都可能導致實驗配置出錯,請耐心再仔細看看操作步驟吧,不要氣餒~

Linux技術交流請加A群:560843(滿),B群:340829(推薦),C群:463590(推薦),點此查看全國群

*本群特色:通過口令驗證確保每一個群員都是《Linux就該這么學》的讀者,答疑更有針對性,不定期免費領取定制禮品。

本章節的復習作業(答案就在問題的下一行哦,用鼠標選中即可看到的~)

1.在Linux系統中有多種方法可以配置網絡參數,請列舉幾種。

答:配置網卡參數可以使用nmtui命令、nmcli命令或者直接編輯網卡配置文件來實現對網卡參數的修改。

2.在RHEL 7系統中使用網卡會話技術的目的是什么?

答:使用nmcli命令來管理網卡會話的目的是為了快速切換網卡參數,以便適應不同的工作場景。

3.請簡述網卡綁定技術mode6模式的特點。

答:平時兩塊網卡均工作,且自動備援,無須交換機設備提供輔助支持。

4.?在Linux系統中,當通過修改其配置文件中的參數來配置服務程序時,若想要讓新配置的參數生效,還需要執行什么操作?

答:需要重新啟動相關的服務程序,或讓服務程序重新加載配置文件,或重啟系統。

5.sshd服務的口令驗證與密鑰驗證方式,哪個更安全?

答:一般情況下,密鑰驗證方式更加安全。若用戶若認證有更高的安全需求,還可以再對密鑰文件進行口令加密,從而實現雙重加密。

6.?想要把本地文件/root/out.txt傳送到地址為192.168.10.20的遠程主機的/home目錄下,且本地主機與遠程主機均為Linux系統,最為簡便的傳送方式是什么?

答:執行命令scp /root/out.txt [email protected]:/home,并在進行口令驗證后即可開始傳送。

7.請簡述配置Yum倉庫的步驟。

答:首先應該創建掛載目錄并把光盤鏡像文件與其關聯,然后修改Yum的配置文件,填寫入相關參數,尤其需要注意掛載目錄的存放路徑要正確無誤,最后便可使用Yum命令來安裝相關的服務程序了。

8.?screen服務程序能夠讓用戶實現遠程控制的不間斷會話服務,即便網絡發生中斷也不丟失對遠程主機的會話控制。那么,當想要恢復到一個名為linux的會話窗口時,應該怎么做呢?

答:執行命令screen -r linux即可恢復到這個會話窗口中。

本文原創地址:http://www.52437949.com/chapter-09.html編輯:劉遄,審核員:暫無