SSH 原理及 OpenSSH 的使用

什么是 SSH 视卢?

Secure Shell(縮寫為 SSH),是創(chuàng)建在應(yīng)用層和傳輸層基礎(chǔ)上的安全協(xié)議莉测。目前主要用于遠程登錄會話和其他網(wǎng)絡(luò)服務(wù)。

為什么 SSH 較為安全柔袁?

傳統(tǒng)的通信協(xié)議呆躲,如 HTTP、FTP瘦馍、Telnet 等歼秽,大多在通信過程中使用明文傳送用戶帳號和用戶口令等信息,所以其本質(zhì)上是不安全的情组。因為這種方式很容易受到中間人攻擊(Man-in-the-Middle Attack燥筷,簡稱 “MITM攻擊”),就是入侵者通過各種手段將其控制的一臺計算機虛擬放置在網(wǎng)絡(luò)連接中的兩臺通信計算機之間院崇,以達到竊取信息的目的肆氓。而 SSH 會對所有傳輸?shù)臄?shù)據(jù)進行非對稱加密,所以較為安全底瓣。

SSH 服務(wù)連接交互過程
什么是 OpenSSH谢揪?

OpenSSH 是對 SSH 協(xié)議的一種實現(xiàn)。以下將針對 OpenSSH 闡述 SSH 的兩種登錄驗證方式捐凭。

SSH 基于口令的登錄驗證
登錄的交互過程:
 1. 客戶端向ssh服務(wù)端發(fā)出登錄請求拨扶。相關(guān)信息通過明文發(fā)送;
 2. 根據(jù)客戶端所使用的服務(wù)協(xié)議版本及算法設(shè)置茁肠,返回相應(yīng)公鑰信息患民;
 3. 客戶端接收到服務(wù)端公鑰信息后,會進行比對垦梆,并讓用戶對相關(guān)信息進行確認匹颤;
 4. 服務(wù)端公鑰校驗及確認后,客戶端會生成一對臨時密鑰用于客戶端加密托猩;
 5. 客戶端向服務(wù)端印蓖,發(fā)送前述生成的臨時密鑰對中的公鑰信息。相關(guān)信息通過明文發(fā)送京腥。

公鑰信息的比對:

  • 當客戶端第一次請求登錄服務(wù)端時:
$ ssh root@192.168.0.1
The authenticity of host '192.168.0.1 (192.168.0.1)' can't be established.
ECDSA key fingerprint is SHA256:iSQfep7qeb/qYXHsoYbPcsiqjlJcixm0QJojavfeR7g.
Are you sure you want to continue connecting (yes/no)?

無法確認 host 的真實性赦肃,它的公鑰指紋為 iSQfep7qeb/qYXHsoYbPcsiqjlJcixm0QJojavfeR7g,你確定要繼續(xù)連接嗎公浪?”他宛。
這里的“公鑰指紋”,是指由于公鑰較長(這里采用 ECDSA 算法)因悲,為了方便比對,通過對其 SHA256 計算勺爱,生成一個 256 位的字符串晃琳。但是除非 ssh 服務(wù)器的公鑰已知,否則客戶端無法確定該公鑰的真實性,也就無法確定連接的服務(wù)器的真實性卫旱,這樣就可能遭到上文提到的MITM攻擊人灼。

  • 輸入 no
Host key verification failed
  • 輸入 yes
Warning: Permanently added host to the list of known hosts.
root@192.168.0.1 password:

公鑰和加密后的 Ip 地址一起被保存在文件 $~/.ssh/known_hosts 中。輸入密碼顾翼,密碼正確投放,即可登錄

  • 如果服務(wù)端因重裝系統(tǒng)等因素導(dǎo)致公鑰指紋出現(xiàn)變化,則會直接導(dǎo)致連接失敗 Host key verification failed适贸,則需要刪除已保存的條目后再重新連接灸芳;
  • 如果之前已經(jīng)成功連接,而且公鑰指紋對比一致拜姿,則會繼續(xù)下一步操作烙样。
SSH 基于密鑰的登錄驗證
準備階段:
  1. 客戶端生成密鑰對;
  2. 將公鑰信息寫入目標服務(wù)器、目標賬戶的配置文件蕊肥。該操作隱含表示了客戶端擁有對目標服務(wù)器的控制權(quán)谒获。
登錄的交互過程:
  1. 客戶端向服務(wù)器發(fā)出登錄請求。在 SSH 服務(wù)啟用了密鑰驗證登錄方式后壁却,會優(yōu)先通過密鑰驗證方式進行登錄驗證批狱;
  2. 服務(wù)器根據(jù) SSH 服務(wù)配置,在用戶對應(yīng)目錄及文件中讀取到有效的公鑰信息展东;
  3. 服務(wù)器生成一串隨機數(shù)赔硫,然后使用相應(yīng)的公鑰對其加密;
  4. 目標服務(wù)器將加密后的密文發(fā)回客戶端琅锻;
  5. 客戶端使用默認目錄或 -i 參數(shù)指定的私鑰嘗試解密卦停;
  6. 如果解密失敗,則會繼續(xù)嘗試密碼驗證等其它方式進行登錄校驗恼蓬。如果解密成功惊完,則將解密后的原文信息重新發(fā)送給目標服務(wù)器;
  7. 目標服務(wù)器對客戶端返回的信息進行比對处硬。如果比對成功小槐,則表示認證成功,客戶端可以登錄荷辕。如果對比失敗凿跳,則表示認證失敗,則會繼續(xù)嘗試密碼驗證等其它方式進行登錄校驗疮方;
Linux 下 SSH 密鑰登錄的實現(xiàn)
  • 需要知道:
    • SSH 協(xié)議 v1 只支持 RSA 算法控嗜,而 SSH 協(xié)議 v2 對 RSA 算法和 DSA 算法都支持。OpenSSH 對兩種算法都支持骡显。本文以 RSA 算法為例疆栏。
    • 生成密鑰對的時候曾掂,可以按需決定是否設(shè)置密碼。但需要注意的是壁顶,如果設(shè)置了密碼珠洗,還需結(jié)合 ssh-agent 代理和 ssh-add 配置才能實現(xiàn)自動登錄。同時若专,相關(guān)配置只對 ssh-agent 啟動的相應(yīng) shell 生效许蓖,用戶退出后重新登錄時還需重新配置。所以调衰,為簡便起見膊爪,本文以常見的、不配置密碼的情況進行說明窖式。
  • 生成密鑰對
$ ssh-keygen -t rsa
Enter file in which to save the key (/home/calvin/.ssh/id_rsa):
# 密鑰保存路徑和文件名蚁飒,可自定義
Enter passphrase (empty for no passphrase): 
# 密碼,按上文說明萝喘,無需設(shè)置
Enter same passphrase again: 
Your identification has been saved in /home/calvin/.ssh/id_rsa.
Your public key has been saved in /home/calvin/.ssh/id_rsa.pub. 
The key fingerprint is:
SHA256:DOlxtOHtHVKt7D7GCDWtjYk5p1iZEtCufhTH2X0w+1g calvin@calvin-ubuntu
The key's randomart image is:
+---[RSA 2048]----+
|     .  o   ..   |
|    . .+ + .o .  |
|     o+.+oo+.=   |
|     .+=+.+o*.E  |
|     ..+S*.B.=   |
|    . o O = + .  |
|   . . + = +     |
|    . o . . =    |
|     .     . .   |
+----[SHA256]-----+

生成的密鑰對默認保存在當前用戶 home 目錄下的 .ssh 文件夾中淮逻,文件名默認為 id_rsa(私鑰) 和 id_rsa.pub(公鑰)。

  • 將公鑰寫入服務(wù)端
$ cat ~/.ssh/id_rsa.pub | ssh root@192.168.0.1 'cat >> ~/.ssh/authorized_keys';
  • 檢查服務(wù)端 SSH 的配置
    SSH 配置文件默認為 /etc/ssh/sshd_config
    • 確保參數(shù) RSAAuthenticationPubkeyAuthentication 沒有顯示的置為 no阁簸,比如:
RSAAuthentication yes
PubkeyAuthentication yes
  • 確保 AuthorizedKeysFile 和公鑰寫入的文件一致爬早。

注:如果修改了參數(shù),需要重啟 ssh 服務(wù)启妹。

  • 登錄
$ ssh root@192.168.0.1 
# 如果自定義了私鑰路徑或文件名
$ sudo -i /path/to/my_rsa root@192.168.0.1
參考文章

SSH 維基百科
SSH原理與運用
云服務(wù)器 ECS Linux SSH 連接交互過程簡介
云服務(wù)器 ECS Linux SSH 基于密鑰交換的自動登錄原理簡介及配置說明

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末筛严,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子饶米,更是在濱河造成了極大的恐慌桨啃,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件檬输,死亡現(xiàn)場離奇詭異照瘾,居然都是意外死亡,警方通過查閱死者的電腦和手機丧慈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門析命,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人逃默,你說我怎么就攤上這事鹃愤。” “怎么了完域?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵软吐,是天一觀的道長。 經(jīng)常有香客問我吟税,道長凹耙,這世上最難降的妖魔是什么鸟蟹? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮使兔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘藤韵。我一直安慰自己虐沥,他們只是感情好,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布泽艘。 她就那樣靜靜地躺著欲险,像睡著了一般。 火紅的嫁衣襯著肌膚如雪匹涮。 梳的紋絲不亂的頭發(fā)上天试,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天,我揣著相機與錄音然低,去河邊找鬼喜每。 笑死,一個胖子當著我的面吹牛雳攘,可吹牛的內(nèi)容都是我干的带兜。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼吨灭,長吁一口氣:“原來是場噩夢啊……” “哼刚照!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起喧兄,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤无畔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后吠冤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體浑彰,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年咨演,在試婚紗的時候發(fā)現(xiàn)自己被綠了闸昨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡薄风,死狀恐怖饵较,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情遭赂,我是刑警寧澤循诉,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站撇他,受9級特大地震影響茄猫,放射性物質(zhì)發(fā)生泄漏狈蚤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一划纽、第九天 我趴在偏房一處隱蔽的房頂上張望脆侮。 院中可真熱鬧,春花似錦勇劣、人聲如沸靖避。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽幻捏。三九已至,卻和暖如春命咐,著一層夾襖步出監(jiān)牢的瞬間篡九,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工醋奠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留榛臼,地道東北人。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓窜司,卻偏偏與公主長得像讽坏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子例证,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容