一節課詳解SSH協議

SSH介紹

 Telnet缺少安全的認證方式,而且傳輸過程採用TCP進行明文傳輸,存在很大的安全隱患。單純提供Telnet服務容易招致DoS(Deny of Service)、主機IP地址欺騙、路由欺騙等惡意***。
 隨着人們對網絡安全的重視,傳統的Telnet和FTP通過明文傳送密碼和數據的方式,已經慢慢不被人接受。SSH(Secure Shell)是一個網絡安全協議,通過對網絡數據的加密,解決了這個問題。它在一個不安全的網絡環境中,提供了安全的遠程登錄和其他安全網絡服務。
 SSH通過TCP進行數據交互,它在TCP之上構建了一個安全的通道。另外SSH服務除了支持標準端口22外,還支持其他服務端口,以防止受到非法***。

注意:

SSH協議包括SSH1.0,SSH1.5,SSH2.0

SSH的功能

SSH支持的客戶端功能

 SSH客戶端功能允許用戶與支持SSH Server的路由器、UNIX主機等建立SSH連接

SFTP

 SFTP(SSH File Transfer Protocol)是SSH FTP的簡稱,是一種安全的FTP。SFTP建立在SSH連接的基礎之上,遠程用戶可以安全地登錄設備,進行文件管理和文件傳送等操作,爲數據傳輸提供了更高的安全保障。同時,由於設備提供了SFTP客戶端功能,可以從本設備安全登錄到遠程SSH服務器上,進行文件的安全傳輸。

STelnet

 STelnet是基於SSH的安全Telnet服務。與Telnet相比,SSH服務器通過對客戶端進行認證及雙向的數據加密,爲網絡終端訪問提供了安全的服務。

SCP

 SCP(Secure Copy)是基於SSH的安全協議,對客戶端進行認證和數據加密,以保證在傳統的非安全網絡環境下進行安全的文件傳輸。
 SCP使用SSH進行數據傳輸和用戶認證,從而確保數據傳輸的可靠性和機密性。客戶端可以發送(上傳)文件到服務器,亦可從服務器請求(下載)文件或目錄。缺省情況下,SCP運行於TCP協議下的22號端口。

SSH服務支持其他端口

 SSH協議的標準偵聽端口號爲22,***者不斷訪問標準端口,導致帶寬的浪費和服務器性能的下降,致使其他正常用戶無法訪問,這是一種DoS(拒絕服務)***。
 設定SSH服務端的偵聽端口號爲其他端口,***者不知道SSH偵聽端口號的更改,可有效防止***者對SSH服務標準端口訪問消耗帶寬和系統資源。正常用戶通過對非標準端口的SSH服務的訪問,降低遭受DoS(拒絕服務)***可能性。
 只有合法的用戶採用SSH服務器設定的非標準偵聽端口才能建立Socket連接,進行SSH協議的版本號協商、算法協商及會話密鑰生成、認證、會話請求、會話階段等過程。

安全的遠程訪問

SSH通過以下措施實現在不安全網絡上提供安全的遠程訪問:
 支持RSA(Revist-Shamir-Adleman Algorithm 非對稱加密算法)/DSA(Digital-Signature Algorithm 數字簽名算法)/ECC(Elliptic Curves Cryptography 橢圓曲線加密)公鑰驗證方式,根據非對稱加密體系的加密原則,通過生成公鑰和私鑰,實現密鑰的安全交換,最終實現安全的會話全過程。
 支持證書驗證方式,客戶端通過證書籤名來進行服務器端驗證,有效防止中間人***。
 支持數據加密標準DES(Data Encryption Standard)、3DES、AES(Advanced Encryption Standard)。
 SSH客戶端與服務器端通信時,對傳輸的數據進行加密,包括用戶名及口令,有效防止對口令的竊聽。
 支持SM2橢圓曲線密碼算法,SM2算法與RSA算法一樣,同屬於非對稱密碼算法體系,是基於ECC(Elliptic Curves Cryptography)算法的非對稱算法。與RSA算法不同的是
 RSA算法是基於大數的因子分解算法,導致了RSA算法的密鑰的長度也越來越長。而長密鑰帶來了運算速度較慢、密鑰存儲和管理不方便問題。ECC算法是基於離散對數的算法,很難破解,具有更高的安全性。與RSA算法相比,在相同安全性條件下,ECC算法可以大大減少密鑰的長度。相較於RSA,橢圓曲線密碼算法使用更短的密鑰長度就能實現比較牢固的加密強度,同時由於密鑰長度相對較短,加密速度也就相對較快。總而言之,ECC橢圓曲線密碼算法具有以下優點:

  1. 相同的安全性,ECC算法的密鑰長度比RSA算法更短。
  2. 計算量小,處理速度快。
  3. 存儲空間小。
  4. 帶寬要求低。

    注意:

     爲了保證更好的安全性,建議不要使用DES/3DES/RSA小於2048位的RSA算法做爲SSH用戶的認證和數據加密方式,推薦使用更安全的ECC認證算法

    支持ACL應用

     ACL是訪問控制列表。通過ACL對SSH類型的用戶界面限制呼入呼出權限,防止一些非法地址的用戶進行TCP連接,避免其進入SSH協商,藉此提高SSH服務器安全性。

    SSH原理介紹

     SSH和telnet、ftp等協議主要的區別在於安全性。這就引出下一個問題:如何實現數據的安全呢?首先想到的實現方案肯定是對數據進行加密。加密的方式主要有兩種:
     對稱加密(也稱爲祕鑰加密)
     非對稱加密(也稱公鑰加密)
    對稱加密,指加密解密使用同一套祕鑰
    對稱加密的加密強度高,很難破解。但是在實際應用過程中不得不面臨一個棘手的問題:如何安全的保存密鑰呢?尤其是考慮到數量龐大的Client端,很難保證密鑰不被泄露。一旦一個Client端的密鑰被竊據,那麼整個系統的安全性也就不復存在。
    一節課詳解SSH協議
    非對稱加密應運而生。非對稱加密有兩個密鑰:“公鑰”和“私鑰”
    兩個密鑰的特性:公鑰加密後的密文,只能通過對應的私鑰進行解密。而通過公鑰推理出私鑰的可能性微乎其微。
    使用非對稱加密方案的登錄流程
     遠程Server收到Client端用戶TopGun的登錄請求,Server把自己的公鑰發給用戶。
     Client使用這個公鑰,將密碼進行加密 Client將加密的密碼發送給Server端。
     遠程Server用自己的私鑰,解密登錄密碼,然後驗證其合法性。若驗證結果,給Client相應的響應。
     私鑰是Server端獨有,這就保證了Client的登錄信息即使在網絡傳輸過程中被竊據,也沒有私鑰進行解密,保證了數據的安全性,這充分利用了非對稱加密的特性。
    一節課詳解SSH協議
    這樣就一定安全了嗎?
    上述流程會有一個問題:Client端如何保證接受到的公鑰就是目標Server端的?,如果一個***者中途攔截Client的登錄請求,向其發送自己的公鑰,Client端用***者的公鑰進行數據加密。***者接收到加密信息後再用自己的私鑰進行解密,不就竊取了Client的登錄信息了嗎?這就是所謂的中間人***
    一節課詳解SSH協議
    SSH中是如何解決這個問題的?

    基於口令的認證

    從上面的描述可以看出,問題就在於如何對Server的公鑰進行認證?在https中可以通過CA來進行公證,可是SSH的publish key和private key都是自己生成的,沒法公證。只能通過Client端自己對公鑰進行確認。通常在第一次登錄的時候,系統會出現下面提示信息:
    上面的信息說的是:無法確認主機的真實性,不過知道它的公鑰指紋,是否繼續連接?

    [~client001] stelnet 10.1.1.1
    Please input the username:client001
    Trying 10.1.1.1 ...
    Press CTRL+K to abort
    Connected to 10.1.1.1 ...
    The server is not authenticated. Continue to access it?(Y/N):y  //服務器沒有經過身份驗證。繼續訪問它
    Save the server's public key?(Y/N):y   //保存服務器的公鑰

一節課詳解SSH協議
之所以用指紋代替key,主要是key過於長(RSA算法生成的公鑰有1024位),很難直接比較。所以,對公鑰進行hash生成一個128位的指紋,這樣就方便比較了。
如果輸入yes後,會出現下面信息:

The server's public key will be saved with the name 172.16.1.1. Please wait...
Feb  8 2020 11:34:46-08:00 R2 %%01SSH/4/SAVE_PUBLICKEY(l)[2]:When deciding whether to save the server's public key 172.16.1.1, the user chose Y. 
[R2]

Enter password:      //輸入密碼

基於公鑰認證

在上面介紹的登錄流程中可以發現,每次登錄都需要輸入密碼,很麻煩。SSH提供了另外一種可以免去輸入密碼過程的登錄方式:公鑰登錄。
 Client將自己的公鑰存放在Server上
 Server端接收到Client的連接請求後,並生成隨機數R,用Client的公鑰對該隨機數進行加密得到pubKey(R),然後將加密後信息發送給Client
 Client端通過私鑰進行解密得到隨機數R,然後對隨機數R和本次會話的SessionKey利用MD5生成摘要Digest1,發送給Server端
 Server端會也會對R和SessionKey利用同樣摘要算法生成Digest2
 Server端會最後比較Digest1和Digest2是否相同,完成認證過程
一節課詳解SSH協議

SSH配置如下

通過STelnet登錄其他設備配置舉例(RSA認證方式和password認證方式)
 通過STelnet登錄其他設備配置的示例。在本示例中,通過在STelnet客戶端和SSH服務器端生成本地密鑰對,在SSH服務器端生成RSA公鑰、併爲用戶綁定該RSA公鑰,實現Stelnet客戶端連接SSH服務器。
 配置兩個登錄用戶爲client001和client002,分別使用password方式和RSA方式登錄SSH服務器。
配置思路

  1. 在SSH服務器上配置用戶client001和client002,分別使用不同的認證方式登錄SSH服務器。
  2. 分別在STelnet客戶端Client002和SSH服務器端生成本地密鑰對,併爲用戶client002綁定SSH客戶端的RSA公鑰,實現客戶端登錄服務器端時,對客戶端進行驗證。
  3. SSH服務器端STelnet服務使能。
  4. 配置SSH用戶client001和client002的服務方式爲STelnet。
  5. 使能SSH客戶端首次認證功能。
  6. 用戶client001和client002分別以STelnet方式實現登錄SSH服務器。
    注意:
     SSH用戶主要有Password、RSA、password-rsa、ECC、password-ecc或all這幾種認證方式:
     如果SSH用戶的認證方式爲password、password-rsa和password-ecc時,必須配置同名的local-user用戶。
     如果SSH用戶的認證方式爲RSA、password-rsa、ECC、password-ecc和all,服務器端應保存SSH客戶端的RSA或ECC公鑰
    一節課詳解SSH協議
    操作步驟
    在服務器端生成本地密鑰對
    <HUAWEI> system-view
    [~HUAWEI] sysname SSH Server
    [*HUAWEI] commit
    [~SSH Server] rsa local-key-pair create    //創建密鑰對
    The key name will be: client002_Host 
    The range of public key size is (2048 ~ 2048). 
    NOTE: Key pair generation will take a short while. 
    [*SSH Server] commit

    在服務器端創建SSH用戶
    配置VTY用戶界面。

    [*SSH Server] user-interface vty 0 4
    [*SSH Server-ui-vty0-4] authentication-mode aaa
    [*SSH Server-ui-vty0-4] protocol inbound ssh
    [*SSH Server-ui-vty0-4] user privilege level 3
    [*SSH Server-ui-vty0-4] commit
    [~SSH Server-ui-vty0-4] quit

    創建SSH用戶Client001。
    新建用戶名爲Client001的SSH用戶,且認證方式爲password。

    [~SSH Server] ssh user client001
    [*SSH Server] ssh user client001 authentication-type password
    [*SSH Server] commit

    爲SSH用戶Client001配置密碼爲Hello-huawei123。

    [~SSH Server] aaa
    [*SSH Server-aaa] local-user client001 password cipher Hello-huawei123
    [*SSH Server-aaa] local-user client001 service-type ssh
    [*SSH Server-aaa] commit
    [~SSH Server-aaa] quit

    創建SSH用戶Client002。
    新建用戶名爲Client002的SSH用戶,且認證方式爲RSA。

    [~SSH Server] ssh user client002
    [*SSH Server] ssh user client002 authentication-type rsa
    [*SSH Server] ssh authorization-type default root
    [*SSH Server] commit

    配置服務器端RSA公鑰
    客戶端Client002生成客戶端的本地密鑰對

    <HUAWEI> system-view
    [~HUAWEI] sysname client002
    [*HUAWEI] commit
    [~client002] rsa local-key-pair create
    The key name will be: client002_Host 
    The range of public key size is (2048 ~ 2048). 
    NOTE: Key pair generation will take a short while. 
    [*client002] commit

查看客戶端上生成RSA公鑰。

[~client002] display rsa local-key-pair public
======================Host Key==========================
Time of Key pair created : 13:22:1 2010/10/25
Key Name : client002_Host
Key Type : RSA Encryption Key
========================================================
Key Code: 

308188
  028180
    B21315DD 859AD7E4 A6D0D9B8 121F23F0 006BB1BB
    A443130F 7CDB95D8 4A4AE2F3 D94A73D7 36FDFD5F
    411B8B73 3CDD494A 236F35AB 9BBFE19A 7336150B
    40A35DE6 2C6A82D7 5C5F2C36 67FBC275 2DF7E4C5
    1987178B 8C364D57 DD0AA24A A0C2F87F 474C7931
    A9F7E8FE E0D5A1B5 092F7112 660BD153 7FB7D5B2
    171896FB 1FFC38CD 
  0203
    010001

Host Public Key for PEM format Code: 
---- BEGIN SSH2 PUBLIC KEY ----
AAAAB3NzaC1yc2EAAAADAQABAAAAgQCyExXdhZrX5KbQ2bgSHyPwAGuxu6RDEw98
25XYSkri89lKc9c2/f1fQRuLczzdSUojbzWrm7/hmnM2FQtAo13mLGqC11xfLDZn
+8J1LffkxRmHF4uMNk1X3QqiSqDC+H9HTHkxqffo/uDVobUJL3ESZgvRU3+31bIX
GJb7H/w4zQ==
---- END SSH2 PUBLIC KEY ----

Public key code for pasting into OpenSSH authorized_keys file: 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQCyExXdhZrX5KbQ2bgSHyPwAGuxu6RDEw9825XYSkri
89lKc9c2/f1fQRuLczzdSUojbzWrm7/hmnM2FQtAo13mLGqC11xfLDZn+8J1LffkxRmHF4uMNk1X3Qqi
SqDC+H9HTHkxqffo/uDVobUJL3ESZgvRU3+31bIXGJb7H/w4zQ== rsa-key

Host Public key for SSH1 format code: 
1024 65537 125048203250833642388841080101906750228075076456213955541037945628567
57310398880086451511608221218821171562865637463140847157102422109476944363593619
24637760514734544191988044752471924402237145321162849626052751701862381759745461
33321165741031171160914926309797395278974490949461701171569544048167828558985421

======================Server Key========================
Time of Key pair created : 13:22:1 2010/10/25
Key Name : client002_Server
Key Type : RSA Encryption Key
========================================================
Key Code: 

3067
  0260
    BDCEC48F 1EDA55AF 80C71881 CF22D6A4 02682F2F
    E50035C8 E1539F1F 9EB3FCAC 2BFEF147 EEF59F23
    7270C3DD 22135C16 AAC236DE EFBF9865 E50D8D26
    B7651BCB 6D87BC2B 96559C38 04FC034B 54CFE7B3
    2B1BBA18 A96FFC29 EF70069D DD1EE053 
  0203
    010001

將客戶端上產生的RSA公鑰傳送到服務器端。

[~SSH Server] rsa peer-public-key rsakey001
Enter "RSA public key" view, return system view with "peer-public-key end".
[*SSH Server-rsa-public-key] public-key-code begin
Enter "RSA key code" view, return last view with "public-key-code end".
[*SSH Server-rsa-public-key-rsa-key-code] 308188
[*SSH Server-rsa-public-key-rsa-key-code] 028180
[*SSH Server-rsa-public-key-rsa-key-code] B21315DD 859AD7E4 A6D0D9B8 121F23F0 006BB1BB
[*SSH Server-rsa-public-key-rsa-key-code] A443130F 7CDB95D8 4A4AE2F3 D94A73D7 36FDFD5F
[*SSH Server-rsa-public-key-rsa-key-code] 411B8B73 3CDD494A 236F35AB 9BBFE19A 7336150B
[*SSH Server-rsa-public-key-rsa-key-code] 40A35DE6 2C6A82D7 5C5F2C36 67FBC275 2DF7E4C5
[*SSH Server-rsa-public-key-rsa-key-code] 1987178B 8C364D57 DD0AA24A A0C2F87F 474C7931
[*SSH Server-rsa-public-key-rsa-key-code] A9F7E8FE E0D5A1B5 092F7112 660BD153 7FB7D5B2
[*SSH Server-rsa-public-key-rsa-key-code] 171896FB 1FFC38CD
[*SSH Server-rsa-public-key-rsa-key-code] 0203
[*SSH Server-rsa-public-key-rsa-key-code] 010001
[*SSH Server-rsa-public-key-rsa-key-code] public-key-code end
[*SSH Server-rsa-public-key] peer-public-key end
[*SSH Server] commit

爲SSH用戶Client002綁定SSH客戶端的RSA公鑰。

[~SSH Server] ssh user client002 assign rsa-key RsaKey001
[*SSH Server] commit

SSH服務器端STelnet服務使能
使能STelnet服務功能。

[~SSH Server] stelnet server enable
[*SSH Server] commit

STelnet客戶端連接SSH服務器
第一次登錄,需要使能SSH客戶端首次認證功能。
使能客戶端Client001首次認證功能。

<HUAWEI> system-view
[~HUAWEI] sysname client001
[*HUAWEI] commit
[~client001] ssh client first-time enable
[*client001] commit

注意:
 使能SSH客戶端首次認證功能後,在STelnet客戶端第一次登錄SSH服務器時,不對SSH服務器的RSA、DSA或ECC公鑰進行有效性檢查。登錄後,客戶端將自動保存RSA、DSA或ECC公鑰,爲下次登錄時認證。如果沒有使能SSH客戶端首次登錄功能,當STelnet客戶端第一次登錄SSH服務器時,由於對SSH服務器的RSA、DSA或ECC公鑰有效性檢查失敗,會導致登錄服務器失敗
使能客戶端Client002首次認證功能

[~client002] ssh client first-time enable
[*client002] commit
STelnet客戶端Client001用password認證方式連接SSH服務器,輸入配置的用戶名和密碼。
[~client001] stelnet 10.1.1.1
Please input the username:client001
Trying 10.1.1.1 ...
Press CTRL+K to abort
Connected to 10.1.1.1 ...
The server is not authenticated. Continue to access it?(Y/N):y
Save the server's public key?(Y/N):y
The server's public key will be saved with the name 10.1.1.1. Please wait...
Enter password:   

輸入密碼Hello-huawei123,顯示登錄成功信息如下:

Info: The max number of VTY users is 20, and the number
      of current VTY users on line is 6.
      The current login time is 2011-01-06 11:42:42.
<SSH Server>

STelnet客戶端Clent002用RSA認證方式連接SSH服務器。

[~client002] stelnet 10.1.1.1
Please input the username: client002
Trying 10.1.1.1 ...
Press CTRL+K to abort
Connected to 10.1.1.1 ...      
The server is not authenticated. Continue to access it?(Y/N):y
Save the server's public key?(Y/N):y
The server's public key will be saved with the name 10.1.1.1. Please wait...    
Info: The max number of VTY users is 20, and the number
      of current VTY users on line is 6.
      The current login time is 2011-01-06 11:42:42.
<SSH Server>

驗證配置結果
配置完成後,在SSH服務器端執行display ssh server status命令、display ssh server session,可以查看到STelnet服務已經使能,並且STelnet客戶端已經成功連接到SSH服務器。
查看SSH狀態信息

[~SSH Server] display ssh server status
SSH Version                                : 2.0
SSH authentication timeout (Seconds)       : 60
SSH authentication retries (Times)         : 3
SSH server key generating interval (Hours) : 0
SSH version 1.x compatibility              : Enable
SSH server keepalive                       : Disable
SFTP IPv4 server                           : Disable
SFTP IPv6 server                           : Disable
STELNET IPv4 server                        : Enable
STELNET IPv6 server                        : Enable
SNETCONF IPv4 server                       : Enable
SNETCONF IPv6 server                       : Enable
SNETCONF IPv4 server port(830)             : Disable
SNETCONF IPv6 server port(830)             : Disable
SCP IPv4 server                            : Enable
SCP IPv6 server                            : Enable
SSH IPv4 server port                       : 22
SSH IPv6 server port                       : 22
SSH server source address                  : 10.1.1.1
SSH ipv6 server source address             : 0::0  
SSH ipv6 server source ***Name             : 
ACL name                                   :
ACL number                                 :
ACL6 name                                  : 
ACL6 number                                :
SSH server ip-block                        : Enable

查看SSH服務器的連接信息。

[~SSH Server] display ssh server session
--------------------------------------------------------------------------------
Session                                 : 1
Conn                                    : SFTP 0
Version                                 : 2.0
State                                   : Started
Username                                : user1
Retry                                   : 1
CTOS Cipher                             : aes256-ctr
STOC Cipher                             : aes256-ctr
CTOS Hmac                               : hmac-sha2-256
STOC Hmac                               : hmac-sha2-256
CTOS Compress                           : none
STOC Compress                           : none
Kex                                     : diffie-hellman-group14-sha1
Public Key                              : ECC
Service Type                            : stelnet
Authentication Type                     : password
Connection Port Number                  : 22
Idle Time                               : 00:00:49
Total Packet Number                     : 90
Packet Number after Rekey               : 90
Total Data(MB)                          : 0
Data after Rekey(MB)                    : 0
Time after Session Established(Minute)  : 0
Time after Rekey(Minute)                : 0
--------------------------------------------------------------------------------

查看SSH用戶信息。

[~SSH Server] display ssh user-information
----------------------------------------------------
Username                : client001
Authentication-type     : password
User-public-key-name    : -
User-public-key-type    : -
Sftp-directory          : -
Service-type            : stelnet

Username                : client002
Authentication-type     : rsa
User-public-key-name    : rsakey001
User-public-key-type    : -
Sftp-directory          : -
Service-type            : stelnet
----------------------------------------------------
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章