Telnet缺乏安全的認證方式,並且傳輸過程採用TCP進行明文傳輸,存在很大的安全隱患。單純提供Telnet服務容易招致DoS(Deny of Service)、主機IP地址欺騙、路由欺騙等惡意***。
隨着人們對網絡安全的重視,傳統的Telnet和FTP經過明文傳送密碼和數據的方式,已經慢慢不被人接受。SSH(Secure Shell)是一個網絡安全協議,經過對網絡數據的加密,解決了這個問題。它在一個不安全的網絡環境中,提供了安全的遠程登陸和其餘安全網絡服務。
SSH經過TCP進行數據交互,它在TCP之上構建了一個安全的通道。另外SSH服務除了支持標準端口22外,還支持其餘服務端口,以防止受到非法***。git
SSH協議包括SSH1.0,SSH1.5,SSH2.0算法
SSH客戶端功能容許用戶與支持SSH Server的路由器、UNIX主機等創建SSH鏈接安全
SFTP(SSH File Transfer Protocol)是SSH FTP的簡稱,是一種安全的FTP。SFTP創建在SSH鏈接的基礎之上,遠程用戶能夠安全地登陸設備,進行文件管理和文件傳送等操做,爲數據傳輸提供了更高的安全保障。同時,因爲設備提供了SFTP客戶端功能,能夠從本設備安全登陸到遠程SSH服務器上,進行文件的安全傳輸。服務器
STelnet是基於SSH的安全Telnet服務。與Telnet相比,SSH服務器經過對客戶端進行認證及雙向的數據加密,爲網絡終端訪問提供了安全的服務。網絡
SCP(Secure Copy)是基於SSH的安全協議,對客戶端進行認證和數據加密,以保證在傳統的非安全網絡環境下進行安全的文件傳輸。
SCP使用SSH進行數據傳輸和用戶認證,從而確保數據傳輸的可靠性和機密性。客戶端能夠發送(上傳)文件到服務器,亦可從服務器請求(下載)文件或目錄。缺省狀況下,SCP運行於TCP協議下的22號端口。session
SSH協議的標準偵聽端口號爲22,***者不斷訪問標準端口,致使帶寬的浪費和服務器性能的降低,導致其餘正經常使用戶沒法訪問,這是一種DoS(拒絕服務)***。
設定SSH服務端的偵聽端口號爲其餘端口,***者不知道SSH偵聽端口號的更改,可有效防止***者對SSH服務標準端口訪問消耗帶寬和系統資源。正經常使用戶經過對非標準端口的SSH服務的訪問,下降遭受DoS(拒絕服務)***可能性。
只有合法的用戶採用SSH服務器設定的非標準偵聽端口才能創建Socket鏈接,進行SSH協議的版本號協商、算法協商及會話密鑰生成、認證、會話請求、會話階段等過程。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橢圓曲線密碼算法具備如下優勢:ide
爲了保證更好的安全性,建議不要使用DES/3DES/RSA小於2048位的RSA算法作爲SSH用戶的認證和數據加密方式,推薦使用更安全的ECC認證算法性能
ACL是訪問控制列表。經過ACL對SSH類型的用戶界面限制呼入呼出權限,防止一些非法地址的用戶進行TCP鏈接,避免其進入SSH協商,藉此提升SSH服務器安全性。ui
SSH和telnet、ftp等協議主要的區別在於安全性。這就引出下一個問題:如何實現數據的安全呢?首先想到的實現方案確定是對數據進行加密。加密的方式主要有兩種:
對稱加密(也稱爲祕鑰加密)
非對稱加密(也稱公鑰加密)
對稱加密,指加密解密使用同一套祕鑰
對稱加密的加密強度高,很難破解。可是在實際應用過程當中不得不面臨一個棘手的問題:如何安全的保存密鑰呢?尤爲是考慮到數量龐大的Client端,很難保證密鑰不被泄露。一旦一個Client端的密鑰被竊據,那麼整個系統的安全性也就不復存在。
非對稱加密應運而生。非對稱加密有兩個密鑰:「公鑰」和「私鑰」
兩個密鑰的特性:公鑰加密後的密文,只能經過對應的私鑰進行解密。而經過公鑰推理出私鑰的可能性微乎其微。
使用非對稱加密方案的登陸流程
遠程Server收到Client端用戶TopGun的登陸請求,Server把本身的公鑰發給用戶。
Client使用這個公鑰,將密碼進行加密 Client將加密的密碼發送給Server端。
遠程Server用本身的私鑰,解密登陸密碼,而後驗證其合法性。若驗證結果,給Client相應的響應。
私鑰是Server端獨有,這就保證了Client的登陸信息即便在網絡傳輸過程當中被竊據,也沒有私鑰進行解密,保證了數據的安全性,這充分利用了非對稱加密的特性。
這樣就必定安全了嗎?
上述流程會有一個問題:Client端如何保證接受到的公鑰就是目標Server端的?,若是一個***者中途攔截Client的登陸請求,向其發送本身的公鑰,Client端用***者的公鑰進行數據加密。***者接收到加密信息後再用本身的私鑰進行解密,不就竊取了Client的登陸信息了嗎?這就是所謂的中間人***
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 //保存服務器的公鑰
之因此用指紋代替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是否相同,完成認證過程
經過STelnet登陸其餘設備配置舉例(RSA認證方式和password認證方式)
經過STelnet登陸其餘設備配置的示例。在本示例中,經過在STelnet客戶端和SSH服務器端生成本地密鑰對,在SSH服務器端生成RSA公鑰、併爲用戶綁定該RSA公鑰,實現Stelnet客戶端鏈接SSH服務器。
配置兩個登陸用戶爲client001和client002,分別使用password方式和RSA方式登陸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 ----------------------------------------------------