Secure Shell(SSH)是一種加密?網絡協議,用于在不安全的網絡上安全地運行網絡服務。
SSH通過客戶端 - 服務器體系結構中的不安全網絡提供安全通道,將SSH客戶端應用程序與SSH服務器相連接。
常見的應用程序包括遠程命令行登錄和遠程命令執行,但任何網絡服務都可以通過SSH進行安全保護。
協議規范區分了兩個主要版本,分別稱為SSH-1和SSH-2。最著名的示例應用程序是用戶遠程登錄計算機系統。
該協議最明顯的應用是在類似Unix的操作系統上訪問shell帳戶,但它在Windows上也有一些有限的用途。在2015年,微軟宣布他們將在未來的版本中包含對SSH的本地支持。
SSH被設計為替代Telnet和不安全的遠程shell協議,如Berkeley?rlogin,rsh和rexec協議。這些協議以明文形式發送信息,特別是密碼,使它們易于使用數據包分析進行截取和披露。SSH使用的加密旨在通過不安全的網絡(如Internet)提供數據的機密性和完整性,盡管Edward Snowden泄漏的文件表明國家安全局有時可以解密SSH,允許他們讀取SSH會話的內容。
2017年7月6日,政府透明度組織維基解密確認,美國中央情報局開發的工具可以安裝在運行Microsoft?Windows或GNU / Linux操作系統的計算機上,以攔截受害系統上SSH客戶端啟動的SSH連接。
定義
如果需要,SSH使用公鑰加密來驗證遠程計算機并允許它對用戶進行身份驗證。[有幾種使用SSH的方式;?一種是使用自動生成的公私密鑰對來簡單地加密網絡連接,然后使用密碼認證登錄。
另一種方法是使用手動生成的公私密鑰對來執行認證,允許用戶或程序登錄而不必指定密碼。在這種情況下,任何人都可以生成一對不同的密鑰(公共和私人)。公鑰被放置在所有必須允許訪問匹配私鑰所有者的計算機上(所有者保密私鑰)。雖然身份驗證基于私鑰,但身份驗證過程中永遠不會通過網絡傳輸密鑰本身。SSH只驗證提供公鑰的同一個人是否擁有匹配的私鑰。在SSH的所有版本中它來驗證未知是重要的公共密鑰,即關聯與身份的公共密鑰,然后再接受它們為有效的。在未經驗證的情況下接受攻擊者的公鑰將授權未經授權的攻擊者作為有效用戶。
密鑰管理
在類Unix系統上,授權公鑰列表通常存儲在允許遠程登錄的用戶的主目錄中,文件為?/ .ssh / authorized_keys。這個文件只有在除了所有者和根以外的任何東西都不能被寫入的情況下,才受到SSH的尊重。當遠程端存在公鑰并且本地端存在匹配的私鑰時,不再需要輸入密碼(某些軟件(如消息傳遞接口(MPI)堆棧)可能需要此無密碼訪問權限才能運行正確)。但是,為了增加安全性,可以使用密碼鎖定私鑰本身。
私鑰也可以在標準位置查找,其完整路徑可以指定為命令行設置(ssh?選項-i)。在SSH-凱基工具產生公鑰和私鑰,總是成對出現。
SSH還支持通過自動生成的密鑰加密的基于密碼的身份驗證。在這種情況下,攻擊者可以模仿合法的服務器端,請求密碼并獲取它(中間人攻擊)。但是,這只有在雙方之前從未認證過的情況下才有可能,因為SSH記住了服務器端以前使用的密鑰。SSH客戶端在接受新的,以前未知的服務器的密鑰之前發出警告。密碼認證可以被禁用。
用法
SSH通常用于登錄遠程機器并執行命令,但它也支持隧道,轉發?TCP端口和X11連接;?它可以使用關聯的SSH文件傳輸(SFTP)或安全副本(SCP)協議傳輸文件。[2]?SSH使用客戶端 - 服務器模型。
在標準TCP端口?22已被分配用于接觸SSH服務器。
SSH?客戶端程序通常用于建立到接受遠程連接的SSH?守護程序的連接。兩者通常都存在于大多數現代操作系統中,包括macOS,大多數Linux,OpenBSD,FreeBSD,NetBSD,Solaris和OpenVMS。值得注意的是,Windows是少數幾個默認不包含SSH的現代桌面/服務器操作系統之一。專有,免費軟件和開源(例如PuTTY,和作為Cygwin?的一部分的OpenSSH版本)存在各種復雜性和完整性的版本。本地Linux文件管理器(例如Konqueror)可以使用FISH協議通過拖放功能提供分割窗格GUI。開源Windows程序WinSCP?使用PuTTY作為后端提供了類似的文件管理(同步,復制,遠程刪除)功能。WinSCP?和PuTTY?都可以直接從USB驅動器運行,而無需在客戶機上安裝。在Windows中設置SSH服務器通常需要安裝(例如,通過安裝Cygwin[)。在?Windows 10版本1709中,可以使用官方的OpenSSH Win32端口。
SSH在云計算中非常重要,可以解決連接問題,避免直接在Internet上暴露基于云的虛擬機的安全問題。SSH隧道可以通過互聯網提供安全路徑,通過防火墻到虛擬機。
歷史和發展
版本1.x?
1995年,芬蘭赫爾辛基科技大學的研究員TatuYl?nen設計了第一個版本的協議(現在稱為SSH-1),并在他的大學網絡上發起了密碼嗅探攻擊。?SSH的目標是取代早期的rlogin,TELNET,ftp?和rsh協議,它們不提供強認證,也不保證機密性。Yl?nen將其實??施作為免費軟件發布在1995年7月,該工具迅速流行起來。到1995年底,SSH用戶群已增至50個國家的20,000名用戶。
1995年12月,Yl?nen成立了SSH通信安全公司,以推廣和開發SSH。原始版本的SSH軟件使用了各種免費軟件,例如GNU libgmp,但由SSH Communications Security發布的更新版本演變為日益專有的軟件。
據估計,到2000年,用戶數量已增長到200萬。
版本2.x?
“Secsh”是負責SSH協議第2版的IETF工作組的官方Internet工程任務組(IETF)名稱。2006年,該協議的修訂版本SSH-2被采納為標準。該版本與SSH-1不兼容。SSH-2通過SSH-1提供安全性和功能改進。例如,通過Diffie-Hellman密鑰交換和通過消息認證碼進行強大的完整性檢查,可以提供更好的安全性。SSH-2的新功能包括通過單個SSH連接運行任意數量的shell會話。由于SSH-2在SSH-1上的優越性和普及性,一些實現例如Lsh?和Dropbear?僅支持SSH-2協議。
版本1.99?
在2006年1月,在版本2.1建立之后,RFC 4253指出,支持2.0和以前版本的SSH的SSH服務器應該將它的版本識別為1.99。這不是一個真正的版本,而是一種識別向后兼容性的方法。
OpenSSH和OSSH?
在1999年,開發人員想要一個免費的軟件版本,然后回到原來的1.2.12版本的原始SSH程序中,該程序是在開源許可證下最后發布的。Bj?rnGr?nvall的OSSH隨后從該代碼庫開發而來。此后不久,OpenBSD的開發分叉Gr?nvall的代碼,并在其上做了廣泛的工作,創造OpenSSH的,它隨2.6版本的OpenBSD。從這個版本開始,一個“可移植性”分支形成了將OpenSSH移植到其他操作系統。
截至2005年,OpenSSH是最受歡迎的SSH實現中的一種,在大量操作系統中默認使用。OSSH同時已經過時。OpenSSH繼續保持并支持SSH-2協議,已經從OpenSSH 7.6版本的代碼庫中刪除了對SSH-1的支持。
用途
SSH是一種協議,可用于許多平臺上的許多應用程序,包括大多數Unix變體(Linux,BSD包括Apple的?macOS和Solaris)以及Microsoft Windows。下面的一些應用程序可能需要僅與特定SSH客戶端或服務器兼容的功能。例如,使用SSH協議來實現VPN是可能的,但目前只有OpenSSH服務器和客戶端實現。
- 要登錄到遠程主機上的shell(替換Telnet和rlogin)
- 為了在遠程主機上執行單個命令(替換rsh)
- 為了設置自動(無密碼)登錄到遠程服務器(例如,使用OpenSSH?)
- 安全的文件傳輸
- 結合rsync備份,有效且安全地復制和鏡像文件
- 為轉發或隧道的端口(不要與混淆VPN,其路由不同網絡之間的數據包,或橋?2個廣播域到一個)。
- 用作完整的加密VPN。請注意,只有OpenSSH服務器和客戶端支持此功能。
- 對于從遠程主機轉發X(可能通過多個中間主機)
- 用于通過與支持SOCKS協議的?SSH客戶端的加密代理連接來瀏覽網頁。
- 使用SSHFS將本地計算機上的目錄作為文件系統安全地掛載到遠程服務器上。
- 用于通過上述一種或多種機制自動遠程監控和管理服務器。
- 用于支持SSH的移動或嵌入式設備上的開發。
文件傳輸協議
Secure Shell協議用于多種文件傳輸機制。
- 安全拷貝(SCP),通過SSH?從RCP協議發展而來
- rsync,旨在比SCP更有效
- SSH文件傳輸協議(SFTP),一種安全的FTP替代品(不要與SSH或FTPS上的FTP混淆)
- 1998年發布的通過shell協議傳輸的文件(又名FISH),通過SSH?從Unix shell命令演變而來
- 快速和安全協議(FASP),又名Aspera,使用SSH進行控制,使用UDP端口進行數據傳輸。
建筑
SSH-2協議具有內部架構(在RFC 4251中定義),具有良好分離的層,即:
- 在傳輸層(RFC 4253)。該層處理初始密鑰交換以及服務器認證,并設置加密,壓縮和完整性驗證。它向上層公開了一個用于發送和接收每個大小最多為32,768字節的明文數據包的接口(實現中可以允許使用更多的接口)。傳輸層還安排密鑰重新交換,通常在1 GB數據傳輸后或1小時后(以先發生者為準)。
- 所述用戶認證層(RFC 4252)。該層處理客戶端認證并提供多種認證方法。身份驗證是由客戶端驅動的:當系統提示您輸入密碼時,可能是SSH客戶端提示,而不是服務器。服務器僅響應客戶端的身份驗證請求。廣泛使用的用戶認證方法包括以下內容:
- 密碼:一種簡單密碼驗證的方法,包括允許更改密碼的設施。并非所有的程序都使用這種方法
- publickey:基于公共密鑰的身份驗證方法,通常至少支持DSA或RSA密鑰對,其他實現也支持X.509證書。
- 鍵盤交互(RFC 4256):一種通用的方法,其中服務器發送一個或多個提示輸入信息,客戶端顯示它們并發回用戶鍵入的響應。用于提供一次性密碼認證,如S / Key或SecurID。當PAM是底層的主機認證提供者時,由某些OpenSSH配置使用,以有效地提供密碼認證,有時導致無法使用僅支持普通密碼認證方法的客戶端登錄。
- GSSAPI身份驗證方法,它提供了一種可擴展的方案,可使用Kerberos 5或NTLM等外部機制執行SSH身份驗證,為SSH會話提供單一登錄功能。這些方法通常通過用于組織的商業SSH實現來實現,但OpenSSH確實有一個可用的GSSAPI實現。
- 的連接層(RFC 4254)。該層定義了提供SSH服務的頻道,頻道請求和全局請求的概念。一個SSH連接可以同時托管多個通道,每個通道都可以雙向傳輸數據。通道請求用于中繼通道特定的帶外數據,例如,更改的終端窗口大小或服務器端進程的退出代碼。SSH客戶端請求使用全局請求轉發的服務器端端口。標準渠道類型包括:
- 外殼為端子殼,SFTP和exec請求(包括SCP轉移)
- direct-tcpip用于客戶端到服務器的轉發連接
- forwarded-tcpip用于服務器到客戶端的轉發連接
- 該SSHFP?DNS記錄(RFC 4255)規定,才能在驗證主機的真實性,以幫助主機公鑰指紋。
這種開放式體系結構提供了相當大的靈活性,允許將SSH用于超出安全shell的各種用途。傳輸層的功能本身就與傳輸層安全(TLS)相當;?用戶認證層具有高度可擴展的自定義認證方法;?并且連接層提供了將多個輔助會話復用到單個SSH連接的能力,這一功能與BEEP相當,并且在TLS中不可用。
增強功能
這些旨在提高SSH產品的性能:
- SSH-over-?SCTP:支持SCTP而不是TCP作為面向連接的傳輸層協議
- ECDSA:支持橢圓曲線DSA而不是DSA或RSA進行簽名。
- ECDH:支持橢圓曲線Diffie-Hellman,而不是簡單的Diffie-Hellman來進行加密密鑰交換。
- UMAC:對UMAC而不是支持HMAC的MAC?/完整性。