年初,新冠肺炎疫情的出現,全國數千萬名員工在家遠程辦公,使用個人設備通過家庭網絡訪問公司資料。因此,IT 安全團隊面臨了眾多新挑戰:如何實施更加安全的身份驗證方案,以確保只有授權人員和設備才能訪問公司敏感資產?
不少小夥伴想起了 SSH,其實大家對它都比較熟悉。大到虛擬機、服務器,小到手機、家電,Linux 設備普及越來越廣,SSH 的運用也越來越廣泛。不僅攻城獅、程序猿離不開它,普通用户也基本都在使用。SSH 可以説是各服務器的標配,有了 SSH,我們不必每次都要蹲到機房裏連接服務器配置服務器,直接遠程就可以操作,同樣,有了 SSH,也能解決遠程辦公的一些安全性問題。
下面我們就來詳細瞭解一下 SSH 的傳奇故事。
什麼是 SSH
SSH(Secure Shell)是一種加密的網絡傳輸協議,它允許用户通過 Internet 控制和修改遠程服務器。該協議的出現替代了未加密的登錄協議(例如 telnet/rlogin)和不安全的文件傳輸方法(例如 FTP),並使用了加密技術來確保與遠程服務器之間的所有通信都以加密的方式進行。它提供了一種機制,用於驗證遠程用户,將輸入從客户端傳輸到服務器,以及將輸出中繼回客户端。
SSH 提供了強大的加密和完整性保護。在客户端和服務器之間建立連接後,SSH 將根據設置中協商的參數對傳輸的數據進行加密。在協商過程中,客户端和服務器根據使用的對稱加密算法達成一致,並生成將要使用的加密密鑰。通訊雙方之間的通信受到行業標準的強加密算法(例如 AES(高級加密標準))的保護,並且 SSH 協議還包括一種機制,該機制通過使用標準哈希算法(例如 SHA)來確保傳輸數據的完整性。
SSH 除了提供強大的加密功能外,網絡管理員還廣泛使用 SSH 遠程管理系統和應用程序,交付軟件補丁或執行命令並移動文件。
SSH 協議如何工作
任何 Linux 或 macOS 用户都可以直接從終端窗口通過 SSH 進入其他遠程服務器。而 Windows 用户可以利用 Xshell、Putty 之類的 SSH 客户端。進入之後就可以與直接操作遠程計算機相同的方式執行 Shell 命令。
SSH 默認在 TCP 端口 22 上運行(可以根據需求修改)。服務器在 22 端口上監聽傳入的連接。如果驗證成功,它將對客户端進行身份驗證並打開正確的通道來進行安全連接。客户端必須通過與服務器啓動 TCP 握手,確保安全的對稱連接,驗證服務器顯示的身份是否與以前的記錄(通常記錄在 RSA 密鑰存儲文件中)匹配,並提供所需的用户憑據來開始 SSH 連接。
服務器(主機)身份驗證
SSH 協議內置於 Unix 和 Linux 服務器中,以實現系統之間的安全連接。該連接由請求連接到 SSH 服務器的客户端建立。SSH 客户端啓動連接建立過程,並使用公共密鑰加密技術來驗證 SSH 服務器的身份。在設置階段之後,SSH 協議使用強大的對稱加密和哈希算法來確保客户端和服務器之間交換數據的私密性和完整性。
下圖是根據 NIST IR 7966 改編而成的,它簡化了 SSH 連接的流程:
- 客户端啓動與 SSH 服務器的連接
- 服務器將其公鑰發送給客户端
- 服務器的公鑰保存在客户端的已知主機文件中
- 客户端與服務器協商連接參數並建立連接
客户端(用户)身份驗證
SSH 協議使用傳統密碼或公共密鑰來啓用客户端身份驗證。但是,鑑於使用密碼的風險和效率低下,公鑰身份驗證被更廣泛地使用。SSH 密鑰不僅比密碼更強大,而且系統管理員還可以繞過基於密碼的手動登錄。
用户如何使用 SSH 密鑰進行身份驗證呢?它們可以使用 ssh-keygen 命令與 SSH 客户端(例如 OpenSSH)生成一個公私鑰對。創建後,用户將其授權密鑰(公共密鑰)放入需要連接的服務器上的 authorized_keys 文件中。
當用户使用基於密鑰的身份驗證遠程登錄時,OpenSSH 服務器將查找授權密鑰,然後用户使用其對應的私鑰向服務器進行身份驗證。由於不需要手動身份驗證,因此通常使用基於密鑰的身份驗證用於 IT 流程的自動化,例如安全的文件傳輸,備份和複製流程或配置管理工具(例如 Ansible,Terraform,Chef 或 Puppet) 。
SSH 協議的常見用例
SSH 連接主要用於保護本地計算機和遠程主機之間不同類型的通信,包括:
- 安全遠程訪問資源
- 遠程執行命令
- 交付軟件補丁和更新
- 交互式和自動文件傳輸
除了在本地計算機和遠程計算機之間創建安全通道外,SSH 協議還用於管理重要的公司基礎結構,例如路由器,服務器硬件,虛擬化平台和操作系統等。
SSH 密鑰用於自動訪問服務器,通常用於腳本,備份系統和配置管理工具中。由於其設計允許跨組織邊界的連接,並且 SSH 密鑰提供了單點登錄(SSO)功能,使用户無需每次輸入密碼即可在各個帳户之間移動。
最後,插播段小廣告:又拍雲的“一鍵登錄”功能,和 SSH 密鑰登錄類似,用户僅需要允許服務商應用獲取本機手機號碼,並通過運營商網絡上傳,即可完成用户身份校驗。不需要頻繁的輸入密碼和手機驗證碼,很大程度上降低了註冊、登錄環節的用户流失。
推薦閲讀
技術選型:為什麼批處理我們卻選擇了Flink
有贊統一接入層架構演進