SSH 協議(Secure Shell 協議)最初在 1995 年由芬蘭的 Tatu Ylönen 設計開發,由 IETF(Internet Engineering Task Force)的網絡工做小組(Network Working Group)制定標準。html
Tatu Ylönen 在 1995 年設計 SSH 協議,同年在芬蘭成立一家名爲 SSH Communications Security Corporation 開發銷售 SSH 商用軟件。爲消除版權影響,OpenSSH 項目在 1999 年 10 月第一次出如今開源世界,該項目創立初衷就是取代 SSH Communications Security Corporation 公司的商用 SSH 軟件,OpenSSH 最終成爲了現在 Linux 系統標準配置,成爲事實上的 SSH 協議標準實現物。算法
SSH 協議支持口令與密鑰兩種安全驗證模式,但不管那種模式,最終都須要使用密鑰來加密數據以確保安全,而 SSH 密鑰一般使用使用的算法爲 RSA 和 DSA。shell
在 SSH 1 協議只支持 RSA 算法,SSH 2 協議支持 RSA 和 DSA 算法。從近些年來看,DSA 變得不是那麼安全,所以推薦仍是使用基於 RSA 算法的密鑰來創建 SSH 安全鏈接。安全
SSH 密鑰的基本使用方法是,隨機生成一個私鑰文件,這個文件只能由你妥善保管,千萬不能泄露給其餘人,根據這個私鑰算出公鑰文件,將公鑰文件發送給 SSH 鏈接對象進行公鑰註冊。當你請求與對方創建鏈接時,鏈接伊始就向對方發送你的公鑰,對方將其與已註冊公鑰進行比對,比對合格則贊成創建鏈接,不合格則可能拒絕鏈接。請求鏈接時,對方也會向你發送他的公鑰,你也須要確認對方公鑰是否合法。一旦雙方都肯定對方身份合法後,雙方就正式創建鏈接,以後雙方的通訊均使用對方的公鑰加密數據,收到對方使用己方公鑰加密的數據後再用己方的私鑰對數據進行解密,從而確保了通訊數據的安全性。網絡
諸如 Xshell 和 SecureCRT 這類工具都有 SSH 密鑰管理功能,能夠生成和使用 SSH 密鑰進行安全驗證。在 Linux 中,OpenSSH 提供了基於 SSH 協議的相關工具可使用。ssh
$ cat id-rsa1.pub 2048 65537 22910674242901951372109700514222305911005404382729826828303733202727246271129151780809328111314142444937643708197065336344061806573173759249496873454280552699704169728818376102327988617178797568649601671735522868137145364100426211002912160142668644115040507860106304962512271803001264027359406587863651664228014572232130610186228786600276455187805301282374669236217832825274065088078401281168028793885110785700945596016775112537678694431532570328169049252968039090407234623028954479983169424889698023716686474015246450335458030057416596685148084608420001646747215709382718194528577791195697244767428069870538621149641 xavier@Qbee-X
SSH 1 公鑰格式爲全部字段以單個空格符分隔,各字段依次爲選項、位數、指數、係數、註釋。第一個字段是可選的,表示該條目(行)是否以數字開頭,選項字段不會以數字開頭。最後一個字段註釋,若是在生成密鑰時沒有給定註釋,默認註釋爲密鑰的建立者(通常就是 username@hostname 這種格式),註釋僅僅是提供給用戶查看密鑰時做爲一個辨識標記,在 SSH 使用中沒有任何做用。工具
$ cat id-rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDmg/9Hoc98c6AIlEPYK6VqE3ZTlMlfXqn2VgU0NAPXeRmYX+jHYZXA5AxMNTD8KgZIuilK23qzzKBy0hgoO9DDpsBg98Pf4NLkHjTcjpPFX1TBD6RWO/OX/g4uN+gZH1/zoREJa4fit8SSG2V2GoQkqrhfRYCy+a9mQX29ZvOLfYK/aMVjb+yfzLJychdvV3CQkDvkd5R/DHNU6ZQ3pyIEjA/cUQqqmgxQj0f72y8IXv8zesXtjXaaKG17R2oSN1MNDZo/y4m426MYxl4mMQMvM5yR3UvhD93pgNgaR8LY/vspcIeE6cJZsGl21oYtrDZ/GdmF5ulMGwjIDfTJRLvb xavier@Qbee-X
SSH 2 公鑰格式爲全部字段以單個空格符分隔,各字段依次爲選項、密鑰類型(keytype)、base64編碼後的密鑰、註釋。第一個字段是可選的,表示該條目(行)是否以數字開頭,選項字段不會以數字開頭。最後一個字段註釋,若是在生成密鑰時沒有給定註釋,默認註釋爲密鑰的建立者(通常就是 username@hostname 這種格式),註釋僅僅是提供給用戶查看密鑰時做爲一個辨識標記,在 SSH 使用中沒有任何做用。ui
密鑰類型(keytype)多是 ecdsa-sha2-nistp256, ecdsa-sha2-nistp384, ecdsa-sha2-nistp521, ssh-ed25519, ssh-dss 或 ssh-rsa。編碼
---- BEGIN SSH2 PUBLIC KEY ---- AAAAB3NzaC1yc2EAAAABIwAAAIEAp7drPA+ZGAZtKNqbVxYWU5 lYPhS5HPZbyozA+KgxPhOLHI1BVoxQfsGae2OUWoy8bpzPib+U ukILHyuEyct9RWv+3OVgEzxuq4KO9y3sK1pdxycvsKwWgXPiis LVO3Zf9Dz7hR0wKzC3+IOMXfDpcEyHRVN4sNsCtPXa8BVbSys= ---- END SSH2 PUBLIC KEY ----
IETF 規定的 SSH 公鑰格式被定義在 RFC4716 文件,該規範規定:加密
起始行和結束行必須分別是:
起始行: ---- BEGIN SSH2 PUBLIC KEY ---- 結束行: ---- END SSH2 PUBLIC KEY ----
能夠添加其餘頭部,例如註釋 Comment: user@example.com。詳情參見 RFC4716。
附:
1. RFC4716