◆閆 梅
?
基于Linux平臺下SSH安全遠程登錄的研究
◆閆 梅
(山西機電職業技術學院 山西 046000)
由于服務器的特殊性能需求,Linux操作系統在服務器上得到廣泛的應用。SSH作為一個免費的遠程管理網絡設備和服務器的工具,為遠程管理設備提供了安全的服務,借助于SSH遠程管理設備,可以避免遠程傳輸數據過程中存在的信息泄露問題。若對服務器的SSH配置不恰當,也可能被黑客竊取到敏感的數據信息。本文通過部署SSH服務,對遠程管理過程中存在的安全問題進行了研究,詳細分析了密鑰對驗證的過程,為用戶遠程訪問服務器提供安全性的參考。
Linux操作系統;SSH;遠程登錄;數據安全
服務器由于具有承擔服務并且保障服務的重要作用,因此在網絡性能、安全性、可管理性上有嚴格的要求,在性能、穩定性、安全性等方面,Linux OS有著其他系統無法比擬的強大優勢,因此Linux操作系統在服務器上有著廣泛的應用。
由于服務器經過配置完成后放置在網絡機房內,當管理服務器時,一般通過遠程管理的方式實現對服務器的日常管理。在Linux OS平臺下,可借助于telnet、FTP等對服務器進行遠程管理,telnet在數據傳輸過程中信息以明文的方式來傳輸數據,若黑客監聽并截獲到傳輸過程中的數據,導致所傳輸的敏感數據被截獲,帶來安全問題,因此選擇更為安全的遠程登錄協議尤為重要。SSH為Secure Shell Client的縮寫,是一種基于傳輸層和應用層上的安全協議,由于SSH對遠程傳輸過程中的信息進行了數據加密,因此SSH可以解決數據在網絡上明文傳輸的問題,有效地避免數據在傳輸過程中被監聽或截取,客戶端可安全地遠程管理網絡設備或服務器。
SSH采用的是客戶端/服務器的工作模式,通過使用非對稱加密算法來實現對傳輸數據的加密,服務器端有一個sshd的守護進程,用于在后臺運行并對客戶端發起的連接請求進行響應,提供對遠程登錄的處理;客戶端借助于應用程序來登錄服務器。SSH具體工作過程如下圖1所示。

圖1 工作過程
(1)客戶端Client向服務器Server發出登錄請求。
(2)服務器Server在接收到客戶端Client的登錄請求后,響應請求同時將自身的公鑰轉發給Client。
(3)客戶端Client使用Server端的公鑰對用戶名和密碼等敏感的數據信息進行加密,并將加密的數據信息發送給服務器Server端。
(4)服務器Server在接收到加密的數據后,用自身的私鑰對加密的數據進行解密,獲取到客戶端發送的數據信息。
(5)服務器Server端將加密的信息解密后,對解密后的信息進行身份的驗證,并將驗證的結果返回給Client。
在Linux平臺下借助于SSH實現遠程管理網絡設備或服務器,需要在客戶端和服務器端做出相應的配置。
若要通過SSH協議來遠程管理服務器,需通過部署配置sshd服務程序,sshd是一個守護進程,用于在后臺運行并響應來自客戶端的連接請求,sshd是基于SSH協議開發的一款遠程管理服務程序,流行的Linux發行版本一般會默認安裝SSH協議。
(1)服務器端SSH協議的開啟
①查看sshd守護進程是否啟動
一些Linux發行版本默認狀態下SSH處于關閉狀態,若使用SSH則需提前開啟。以管理員身份登錄Linux服務器,通過netstat -atpn |grep 22命令來查看sshd進程是否開啟,22是SSH協議對應的端口號,用于監聽客戶端的連接請求,如圖2所示,輸入命令后沒有輸出,說明sshd守護進程沒有開啟。

圖2 sshd進程未開啟
②開啟并重啟SSH服務
若sshd守護進程未開啟,則需通過service sshd start命令開啟sshd守護進程,通過service sshd restart重新啟動SSH服務,啟動過程如下所示。
[root@sv Desktop]# service sshd start
Starting sshd: [ OK ]
[root@sv Desktop]# service sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]
③再次驗證sshd守護進程是否啟動
再次通過netstat -atpn |grep 22命令來檢驗SSH是否成功啟動,SSH成功啟動后如下圖3所示,發現存在22號監聽端口,說明sshd守護進程已經啟動。

圖3 sshd守護進程開啟
注:若在以上操作完成后仍無法開啟ssh,必要時關閉防火墻,通過/etc/init.d/iptables.stop命令來關閉防火墻。
(2)更改服務器端的網絡參數
類似于Windows下主機之間的通信,Linux主機要實現與網絡中不同PC的通信,需要配置正確的網絡參數,網路配置通常包括主機名、IP地址、子網掩碼、默認網關等。在Linux平臺下,TCP/IP的網絡配置信息分別存儲相關的配置文件中,有/etc/sysconfig/network、網卡配置文件、/etc/hosts、/etc/resolv.conf以及/etc/host.conf等文件。
①/etc/sysconfig/network
該文件主要用于設置基本的網絡配置參數,包括主機名稱、網關等,設置HOSTNAME=helloa GATEWAY=192.168.21.1,修改后的信息如圖4所示。

圖4 /etc/sysconfig/network文件
②/etc/sysconfig/network/ifcfg-ethx
該文件用于設置網卡的名稱、IP地址、子網掩碼、DNS等信息,設置網卡的IP地址、網關及DNS的地址信息分別為:IPADDDR=192.168.21.2 NETMASK=255.255.255.0
GATEWAY=192.168.21.1 dns1=8.8.8.8

圖5 /etc/sysconfig/network/ifcfg-ethx文件
③重啟網絡服務
對配置文件修改以后,應該通過service network restart重新啟動網絡服務,使配置文件生效。
[root@sv network-scripts]#service network restart
shutting down interface eth1: Device state:3 (disconnected)
[OK]
Shutting down loopback interface: [OK]
Bringing up loopback interface: [OK]
Bringing up interface eth1:Active connecting state:activated
Active connetion
path:/org/freedeaktop/NetworkManager/ActiveConnection/1
[OK]
通過ssh遠程連接到server端,首次通過客戶端遠程訪問服務器,系統會提示是否繼續連接,客戶端如果接受遠程服務器的公鑰,則輸入yes,隨后系統會要求輸入服務器的登錄密碼,如下顯示了登錄的過程。
[root@localhost -]#ssh 192.168.21.2
The authenticity of host ‘192.168.21.2(192.168.21.2)’can not be established RSA key fingerprint is d4:3f:0d:f6:de:25:d9:29:28:25:5e:
f3:f3:e2:9da7.
Are you sure you want to continue connecting (yes/no)? yes
Warning:Permanently added ‘192.168.21.2’(RSA) to the list of known hosts.
root@192.168.21.2’s password:
[root@sv -]#
第二次及以后遠程登錄服務器時,不會再提示是否繼續,直接提示輸入服務器的登錄密碼,如下所示。不會提示是否繼續是因為相關的公鑰信息已經保存在客戶端的known_hosts文件中,如下所示。
[root@localhost etc]# ssh 192.168.21.2
root@192.168.21.2’s pasword:
Last login:Tue May 22 15:21:39 2018 from 192.168.21.128
[root@sv -]#
查看公鑰信息,如圖6所示。

圖6 known_hosts文件
通過SSH遠程訪問服務器端的過程本來是安全的,但在具體實施的過程中存在了以下的安全問題:如果有人偽裝成服務器,截獲了客戶端的登錄請求,偽裝者將其公鑰發給客戶端,客戶端并不清楚其接收到的信息是否來自于真實的服務器端,于是使用接收到的偽裝者的公鑰對其傳輸的數據進行加密,并將加密后的信息傳輸給偽裝者,偽裝者使用自身的私鑰對接收到的信息進行解密,獲取到客戶端傳輸的敏感信息,帶來安全問題。
通過對服務器密鑰對的驗證,核對客戶的私鑰、服務器端的公鑰是否匹配,達到解決上述“偽裝者”的問題,具體實施過程如下。
在/etc/ssh/sshd_config文件下的PubkeyAuthention用來設置是否開啟公鑰驗證,如果采用公鑰驗證的方式登錄服務器,需要開啟此PubkeyAuthention選項。對sshd_config文件配置完成后,需通過service sshd restart重新啟動SSH服務,使配置文件生效。
(1)創建密鑰對;
通過ssh-keygen -t [rsa|dsa]成密鑰文件和私鑰文件,私鑰文件、公鑰文件分別存儲在id_rsa、id_rsa.pub文件中。在創建密鑰對的過程中,系統會提示是否設置私鑰口令,為了安全考慮,最好設置一個私鑰口令,具體操作如下所示。
[root@localhaost Desktop]#ssh-keygen -t rsa //使用rsa算法進行加密
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
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 fingerprintis:27:a0:ce:e7:59:f6:7b:90:b1:15:8f:36:76:
d3:41:36
root@localhost.localdomain
The key's randomart image is:

(2)上傳公鑰文件到服務器;
通過sh-copy-id將生成的客戶端產生的公鑰文件上傳至服務器端,私鑰文件保存在客戶端,如下所示。
[root@localhost -]# ssh-copy-id yanmei@192.168.21.2
yanmei@192.168.21.2’s pasword:
Now try logging into the machine,with “ssh ‘yanmei@192.168.
21.2’ and check in:
.ssh/authorized_keys to make sure we huven’t added extra keys that you weren’t expecting.
(3)從服務器端驗證是否上傳成功;
從服務器端查看公鑰是否上傳成功,如下所示。
[root@sv Desktop]#su yanmei
[yanmei@sv Desktop]$cd -
[yanmei@sv -]$cd .ssh
[yanmei@sv .ssh]$ll
total 4
-rw-------.1 yanmei yanmei 408 2018-05-23 11:15 authorized_keys
公鑰信息保存在/ssh/ authorized_keys文件中,查看公鑰信息如下圖7所示。

圖7 authorized_keys文件
(4)重新啟動SSH服務;
(5)客戶端遠程登錄服務器,系統提示的不再是輸入用戶登錄的口令,而是對密鑰對進行認證。
[root@localhost -]# ssh yanmei@192.168.21.2
Enter passphrase for key ‘/root/.ssh/id_rsa’:
Last login:Wed May 23 10:11:52 2018 from 192.168.21.128
[yanmei@sv - ]$
由于私鑰只有客戶端自己知道,所以偽裝者即便獲取到口令,也無法實現遠程登錄服務器。
通過在linux平臺上對SSH遠程登錄安全技術的實驗,驗證了通過對SSH密鑰對驗證的配置,可以避免“偽裝者”的攻擊,實現安全的遠程管理服務器并提供安全的網絡服務,有效地防止敏感信息在傳輸過程中的泄露,為服務器的安全運行和管理提供保障。
[1]楊春龍.SSH協議在資源監控系統數據傳輸中的應用[J].軟件,2013.
[2]胡家芬.基于SSH的Linux遠程管理機制研究[J].福建電腦,2012.
[3]張倩莉, 喬治錫.基于SSH的Linux系統遠程登錄研究[J].計算機時代,2016.
[4]張國防.基于SSH協議的Linux遠程管理[J].計算機安全,2014.
[5]王曉玲.Linux平臺下基于OpenSSH的安全遠程登錄服務的設計與實現[J].信息與電腦(理論版),2014.
[6]陳立德.基于Linux系統網站的布署與管理[J].廣州航海高等專科學校學報,2010.
[7]陳禮華,熊齊邦.基于TELNET/SSH的Linux主機監視系統[J].計算機應用,2004.
[8]姜大慶.Linux系統與網絡管理[M].中國鐵道出版社,2009.