RHCE(三)SSH原理與運用

什麼是遠程連接服務器

遠程連接服務器通過文字或圖形接口方式來遠程登錄系統,讓你在遠程終端前登錄linux主機以取得可操作主機接口(shell),而登錄後的操作感覺就像是坐在系統前面一樣。

遠程連接服務器的功能

   1、分享主機運算能力
   2、服務器類型有限度開放連接
   3、工作站類型,只對內網開放

常見的遠程管理工具方式

  |--RDP(remote desktop protocal )協議,windows遠程桌面管理(圖形界面)
  |--telenet CLI界面下遠程管理,幾乎所有操作系統都有(內容明文傳輸)   端口23
  |--ssh  CLI界面下的遠程管理,幾乎所有操作系統都有(內容加密傳輸)    端口22
  |--RFB (remote frame buffer) 圖形化遠程管理協議 VNC (Virtual Network Computing)使用的協議。(在linux unix Macos 下
  圖形界面遠程管理工具)

SSH簡介

1.SSH代表安全外殼(Secure Shell),SSH爲建立在應用層和傳輸層基礎上的安全協議。
2.SSH默認情況下通過端口22運行;不過很容易更改這個端口。
3.SSH是一種非常安全的協議,因爲它共享併發送經過加密的信息,從而爲通過互聯網等不安全的網絡訪問的數據提供了機密性        		  和安全性。
4.一旦通訊的數據使用SSH經過加密,就極難解壓和讀取該數據,所以我們的密碼在公共網絡上傳輸也變得很安全。
5.SSH還使用公鑰用於對訪問服務器的用戶驗證身份,這是一種很好的做法,爲我們提供了極高的安全性。
6.SSH主要用在所有流行的操作系統上,比如Unix、Solaris、Red-Hat Linux、CentOS和Ubuntu等。
7.ssh服務端由2部分組成: openssh(提供ssh服務)    openssl(提供加密的程序)
8.ssh的客戶端可以用 XSHELL,Securecrt, Mobaxterm等工具進行連接,ssh sftp

SSH加密原理

如何實現加密

SSH算法

SSH爲了確保信息的安全傳輸,從連接發起到完成各階段的各個點SSH協議採用了許多不同類型的數據加密技術,包括可逆的對稱加密,非對稱加密以及不可逆的哈希散列。

SSL/tls (Transport Layer Security 傳輸層安全協議)

SSL協議位於TCP/IP協議與各種應用層協議之間,爲數據通訊提供安全支持。SSL協議可分爲兩層: SSL記錄協議(SSL Record Protocol):它建立在可靠的傳輸協議(如TCP)之上,爲高層協議提供數據封裝、壓縮、加密等基本功能的支持。 SSL握手協議(SSL Handshake Protocol):它建立在SSL記錄協議之上,用於在實際的數據傳輸開始前,通訊雙方進行身份認證、協商加密算法、交換加密密鑰等。
Secure Socket Layer,爲Netscape所研發,用以保障在Internet上數據傳輸之安全,利用數據加密(Encryption)技術,可確保數據在網絡上之傳輸過程中不會被截取及竊聽。一般通用之規格爲40 bit之安全標準,美國則已推出128 bit之更高安全標準,但限制出境。只要3.0版本以上之I.E.或Netscape瀏覽器即可支持SSL。

ssl提供服務

 1、認證用戶和服務器,確保數據發送到正確的客戶機和服務器;  握手協議
 2、加密數據以防止數據中途被竊取;                                          ssl記錄協議
 3、維護數據的完整性,確保數據在傳輸過程中不被改變。     

加密技術:

對稱祕鑰加密

共享密鑰加密(對稱密鑰加密):加密和解密同用一個密鑰。加密時就必須將密鑰傳送給對方,那麼如何安全的傳輸呢 md5 核心是:加密類型

非對稱祕鑰加密

公開密鑰加密(非對稱密鑰加密):公開密鑰加密使用一對非對稱的密鑰。一把叫做私有密鑰,一把叫做公開密鑰。私有密鑰不能讓其他任何人知道,而公開密鑰則可以隨意發佈,任何人都可以獲得。使用此加密方式,發送密文的一方使用公開密鑰進行加密處理,對方收到被加密的信息後,再使用自己的私有密鑰進行解密。利用這種方式,不需要發送用來解密的私有密鑰,也不必擔心密鑰被攻擊者竊聽盜走
核心是:算法RSA

1、服務端創建公鑰和私鑰。
2、客戶端請求訪問服務端時,服務端要求客戶端下載數據,該數據就是公鑰。
3、接下來客戶端發送的數據都需要通過公鑰加密發送。
4、服務端接收到數據,使用私鑰解密即可。

中間人攻擊

SSH之所以能夠保證安全,原因在於它採用了公鑰加密。

整個過程是這樣的:
(1)遠程主機收到用戶的登錄請求,把自己的公鑰發給用戶。
(2)用戶使用這個公鑰,將登錄密碼加密後,發送回來。
(3)遠程主機用自己的私鑰,解密登錄密碼,如果密碼正確,就同意用戶登錄。

這個過程本身是安全的,但是實施的時候存在一個風險:如果有人截獲了登錄請求,然後冒充遠程主機,將僞造的公鑰發給用戶,那麼用戶很難辨別真僞。因爲不像https協議,SSH協議的公鑰是沒有證書中心(CA)公證的,也就是說,都是自己簽發的。
可以設想,如果攻擊者插在用戶與遠程主機之間(比如在公共的wifi區域),用僞造的公鑰,獲取用戶的登錄密碼。再用這個密碼登錄遠程主機,那麼SSH的安全機制就蕩然無存了。這種風險就是著名的"中間人攻擊"(Man-in-the-middle attack)。
SSH協議是如何應對的呢?

ssh倆種驗證級別

(一)口令登錄

如果你是第一次登錄對方主機,系統會出現下面的提示:

$ ssh user@host

  The authenticity of host 'host (12.18.429.21)' can't be established.

  RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.

  Are you sure you want to continue connecting (yes/no)?

這段話的意思是,無法確認host主機的真實性,只知道它的公鑰指紋,問你還想繼續連接嗎?
所謂"公鑰指紋",是指公鑰長度較長(這裏採用RSA算法,長達1024位),很難比對,所以對其進行MD5計算,將它變成一個128位的指紋。上例中是98:2e:d7:e0🇩🇪9f:ac:67:28:c2:42:2d:37:16:58:4d,再進行比較,就容易多了。
很自然的一個問題就是,用戶怎麼知道遠程主機的公鑰指紋應該是多少?回答是沒有好辦法,遠程主機必須在自己的網站上貼出公鑰指紋,以便用戶自行覈對。
假定經過風險衡量以後,用戶決定接受這個遠程主機的公鑰。

Are you sure you want to continue connecting (yes/no)? yes

系統會出現一句提示,表示host主機已經得到認可。

Warning: Permanently added 'host,12.18.429.21' (RSA) to the list of known hosts.

然後,會要求輸入密碼。

Password: (enter password)

如果密碼正確,就可以登錄了。
當遠程主機的公鑰被接受以後,它就會被保存在文件$HOME/.ssh/known_hosts之中。下次再連接這臺主機,系統就會認出它的公鑰已經保存在本地了,從而跳過警告部分,直接提示輸入密碼。
每個SSH用戶都有自己的known_hosts文件,此外系統也有一個這樣的文件,通常是/etc/ssh/ssh_known_hosts,保存一些對所有用戶都可信賴的遠程主機的公鑰。

(二)公鑰登錄

使用密碼登錄,每次都必須輸入密碼,非常麻煩。好在SSH還提供了公鑰登錄,可以省去輸入密碼的步驟。
所謂"公鑰登錄",原理很簡單,就是用戶將自己的公鑰儲存在遠程主機上。登錄的時候,遠程主機會向用戶發送一段隨機字符串,用戶用自己的私鑰加密後,再發回來。遠程主機用事先儲存的公鑰進行解密,如果成功,就證明用戶是可信的,直接允許登錄shell,不再要求密碼。
這種方法要求用戶必須提供自己的公鑰。如果沒有現成的,可以直接用ssh-keygen生成一個。

用這種方式,你必須知道自己密匙的口令。但是,與第一種級別相比,第二種級別不需要在網絡上傳送口令。 第二種級別不僅加密所有傳送的數據,而且“中間人”這種攻擊方式也是不可能的(因爲他沒有你的私人密匙)。但是整個登錄的過程可能需要10秒。

SSH配置文件

1.#Port 22                                      監聽端口,默認監聽22端口   【默認可修改】
2.#AddressFamily any                   IPV4和IPV6協議家族用哪個,any表示二者均有
3.#ListenAddress 0.0.0.0              指明監控的地址,0.0.0.0表示本機的所有地址  【默認可修改】
6.#Protocol 2                                使用SSH第二版本,redhat7默認第一版本已拒絕
16.#ServerKeyBits 1024              主機祕鑰長度
22.SyslogFacility AUTHPRIV       當有人使用ssh登錄系統的時候,SSH會記錄信息,信息保存在/var/log/secure裏面
23.#LogLevel INFO                     日誌的等級 全部
24.# Authentication:
25.#LoginGraceTime 2m            登錄的寬限時間,默認2分鐘沒有輸入密碼,則自動斷開連接
26.#PermitRootLogin no
27.PermitRootLogin yes             是否允許管理員直接登錄,'yes'表示允許
28.#StrictModes yes                   是否讓sshd去檢查用戶主目錄或相關文件的權限數據
29.#MaxAuthTries 6                   最大認證嘗試次數,最多可以嘗試6次輸入密碼。之後需要等待某段時間後才能再次輸入密碼
30.#MaxSessions 10                  允許的最大會話數
51.PasswordAuthentication yes                    是否允許支持基於口令的認證
96.#UseDNS yes                        是否反解DNS,如果想讓客戶端連接服務器端快一些,這個可以改爲no
110.Subsystem sftp /usr/libexec/openssh/sftp-server                    支持 SFTP ,如果註釋掉,則不支持sftp連接
117.AllowUsers user1 user2            登錄白名單(默認沒有這個配置,需要自己手動添加),允許遠程登錄的用戶。如果名單                    
                                      中沒有的用戶,則提示拒絕登錄 

SSH免密設置

SSH建立連接的完整過程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章