SSH(Secure Shell)是一種網(wǎng)絡(luò)協(xié)議,即非常安全的shell,主要用于計算機間加密傳輸休雌。SSH的主要目的是用來取代傳統(tǒng)的 telnet 和 R 系列命令(rlogin、rsh、rexec 等)遠(yuǎn)程登錄和遠(yuǎn)程執(zhí)行命令的工具要销,實現(xiàn)對遠(yuǎn)程登錄和遠(yuǎn)程執(zhí)行命令加密,防止網(wǎng)絡(luò)監(jiān)聽導(dǎo)致密碼泄露的問發(fā)生夏块。
1. 查看 Mac 上的 SSH key
最近在本地Git服務(wù)器上創(chuàng)建工程后疏咐,網(wǎng)頁上提示:需要在其上添加client主機的SSH key,才能正常推拉代碼脐供。我用的是Mac浑塞,那怎樣才能查看本機的SSH key呢?
打開終端政己,在終端中分別輸入如下命令:
$ cd .ssh/
$ ls -al
紅框中的文件酌壕,就存儲著 SSH key:
讀取文件內(nèi)容,顯示在控制臺上歇由,其中卵牍,以ssh-rsa... 開頭完整字的符串就是的SSH key。
$ cat id_rsa.pub
2. 與SSH 相關(guān)的概念
2.1 加密
加密是將一段數(shù)據(jù)處理之后沦泌,輸出為一段外人無法或者很難破譯的數(shù)據(jù)糊昙,只有指定的人可以解密。 一般來說谢谦,加密過程會有一個key释牺,這個key作為加密的參數(shù), 解密時也會用一個相關(guān)聯(lián)的key作為輸入回挽。粗略來說是下面的流程:
加密方:encrypted_data = encrypt(raw_data, key)
解密方:raw_data = decrypt(encrypted_data, key1)
主流加密算法一般分為兩類:
- 對稱加密(私鑰加密)
對稱加密就是加密方和解密方用的都是同一個key没咙,這個key對于加密方和解密方來說是保密的,是不能讓第三方知道的千劈。第三方不知道私鑰時镜撩,是很難將加密的數(shù)據(jù)解密的。一般來說是加密方先產(chǎn)生私鑰,然后通過一個安全的途徑來告知解密方這個私鑰袁梗。
- 非對稱加密(公鑰加密)
非對稱加密需要解密的一方首先生成一對密鑰宜鸯,一個私鑰(private key)一個公鑰(public key),私鑰留在本地不能泄露出去遮怜,而公鑰則可以任意對外發(fā)布淋袖。用公鑰進行加密獲得的數(shù)據(jù),只能用私鑰才能解密锯梁。加密方首先從解密方獲取公鑰即碗,然后利用這個公鑰進行加密,把加密后的數(shù)據(jù)發(fā)送給解密方陌凳,解密方利用私鑰進行解密剥懒。如果加密的數(shù)據(jù)在傳輸過程中被第三方截獲,因為其沒有私鑰合敦,也是沒有辦法進行解密的初橘。
注意:
公鑰加密的問題還包括獲取了公鑰之后,加密方如何保證公鑰來自于確定的一方充岛,而不是某個冒充的機器保檐,這也就涉及到了公鑰加密里面比較重要的一步 —— 身份驗證。
一般崔梗,對稱加密都會比非對稱加密效率高夜只,所以大數(shù)據(jù)量的加密一般都會使用對稱加密,而非對稱加密會作為身份驗證和交換私鑰的一個手段蒜魄。
2.2 數(shù)據(jù)的一致性(完整性)
數(shù)據(jù)的一致性是指如何保證一段數(shù)據(jù)在傳輸?shù)倪^程中沒有被遺漏扔亥、破壞或者修改過。目前普遍的做法是對數(shù)據(jù)計算hash值(摘要算法)谈为,得到的hash值和數(shù)據(jù)一起傳輸砸王,然后在收到數(shù)據(jù)的時候也對數(shù)據(jù)進行hash,將得到的hash值和傳輸過來的hash值進行比對峦阁,如果一樣,則說明收到的數(shù)據(jù)是完整的耘成,否則榔昔,是被修改過的。
目前流行的hash算法有MD5瘪菌、SHA-1算法撒会。
2.3 身份驗證
身份驗證是指判斷一個人或者機器是不是由第三方冒充的(類似于https抓包中的代理)。在SSH里面师妙,這個過程主要是通過公鑰來完成的诵肛,服務(wù)器會維護一個公鑰列表,保存的是它信任的機器上面的公鑰默穴,在進行SSH連接時怔檩,客戶端送過來一個公鑰褪秀,然后服務(wù)器就會在列表中進行查找,如果這個公鑰在列表中存在薛训,就說明這個客戶端是允許進行連接的媒吗。
此處有個問題,那公鑰會不會被截獲乙埃?闸英??
3. SSH 的工作原理
SSH的機制大體是介袜,本地客戶端發(fā)送一個連接請求到遠(yuǎn)程的服務(wù)端甫何,服務(wù)端檢查申請的包和IP地址再發(fā)送密鑰給SSH客戶端,本地客戶端再將密鑰發(fā)回給服務(wù)端遇伞,到此為止辙喂,連接建立。服務(wù)端啟動SSH服務(wù)器后赃额,sshd進程運行并在默認(rèn)的22端口進行監(jiān)聽加派。
SSH機制中安全驗證方式包括,基于口令的安全驗證(賬號密碼)和基于公鑰鑰的安全驗證:
-
密碼認(rèn)證缺點
- 密碼容易被破解跳芳;
- 用戶無法空密碼登錄芍锦;
- 多個人登錄同一賬戶時,需所有用戶都知道密碼飞盆,并且容易泄露娄琉,修改密碼極不便。
-
公鑰認(rèn)證
- 允許空密碼登錄吓歇;
- 公鑰孽水,任何人都能看到,用戶加密城看;
- 私鑰女气,只有擁有者看到,用于解密测柠;
- 多人登錄同一賬戶時炼鞠,可通過各自的公鑰登錄到系統(tǒng)的;
- 通過公鑰加密的的密文使用私鑰輕松解密轰胁,但根據(jù)公鑰來猜測私鑰十分困難谒主。
3.1 基于公鑰的認(rèn)證過程
本地生成一對密鑰,并把公鑰放到需要訪問的服務(wù)器上赃阀。如果需要連接到SSH服務(wù)器上霎肯,客戶端軟件就會向服務(wù)器發(fā)送請求,請求用本地的密鑰進行安全驗證,服務(wù)器收到請求后观游,先在該服務(wù)器上的主目錄下尋找客戶端的公鑰搂捧,然后把它和客戶端發(fā)來的公鑰進行比較。如果一致备典,服務(wù)器就用這個公鑰加密“質(zhì)詢”(challenge)并把它發(fā)送給客戶端軟件异旧,客戶端本地接收到“質(zhì)詢”之后,就可用本地的私鑰解密再把它發(fā)給服務(wù)器提佣,即建立連接吮蛹。
SSH 的公鑰認(rèn)證利用了非對稱加密的特性。服務(wù)器和客戶端都各自擁有自己的公鑰和密鑰拌屏,如下:
Ac 客戶端公鑰
Bc 客戶端私鑰
As 服務(wù)器公鑰
Bs 服務(wù)器私鑰
在認(rèn)證之前潮针,客戶端需要通過某種方法將公鑰 Ac 登錄到服務(wù)器上。認(rèn)證過程分為兩個步驟:
1. 會話密鑰(session key)生成
1)客戶端請求連接服務(wù)器倚喂,服務(wù)器將 As 發(fā)送給客戶端每篷;
2)服務(wù)器生成會話ID(session id),設(shè)為 p端圈,發(fā)送給客戶端焦读;
3)客戶端生成會話密鑰(session key),設(shè)為 q舱权,并計算 r = p xor q矗晃;
4)客戶端將 r 用 As 進行加密,結(jié)果發(fā)送給服務(wù)器宴倍;
5)服務(wù)器用 Bs 進行解密张症,獲得 r;
6)服務(wù)器進行 r xor p 的運算鸵贬,獲得 q俗他;
7)至此服務(wù)器和客戶端都知道了會話密鑰q,以后的傳輸都將被 q 加密阔逼。
2. 認(rèn)證
1)服務(wù)器生成隨機數(shù) x兆衅,并用 Ac 加密后生成結(jié)果 S(x),發(fā)送給客戶端嗜浮;
2)客戶端使用 Bc 解密 S(x) 得到 x羡亩;
3)客戶端計算 q + x 的 md5 值 n(q+x),q為上一步得到的會話密鑰周伦;
4)服務(wù)器計算 q + x 的 md5 值 m(q+x);
5)客戶端將 n(q+x) 發(fā)送給服務(wù)器未荒;
6)服務(wù)器比較 m(q+x) 和 n(q+x)专挪,兩者相同則認(rèn)證成功。
3.2 基于公鑰的加密過程
A和B,A想把一段明文通過雙密鑰加密后發(fā)送給B寨腔,B有一對公鑰和私鑰速侈,加密解密過程:
- B將公鑰發(fā)送給A
- A用B的公鑰加密自己要發(fā)送的明文消息,然后傳送給B
- B用自己私鑰解密A的消息
基于公開密鑰的認(rèn)證過程:
身份認(rèn)證和加密不同迫卢,只要身份認(rèn)證倚搬,鑒別用戶真?zhèn)巍?br> 只要鑒別用戶的私鑰是正確的,就可以鑒別身份真?zhèn)巍?/p>
A和B兩個用戶乾蛤,A想讓B知道自己是真實的A每界,不是假冒的,因此身份認(rèn)證過程:
- A用自己的私鑰對文件加密家卖,從而對文件簽名,并將簽名文件發(fā)送給B
- B用A的公鑰解密文件眨层,從而驗證簽名,完成身份認(rèn)證過程
再是文件加密解密過程:同上(需完成兩次驗證)
4. SSH 建連過程抓包
主要包括以下步驟:
- TCP 三次握手
- SSH 協(xié)議版本協(xié)商
- 客戶端與服務(wù)端的公鑰交換
- 加密算法協(xié)商
- 客戶端使用對稱加密的密鑰認(rèn)證
- 客戶端與服務(wù)端安全通信
我使用 wireshark 抓包并查看了一下其 SSH 的建連過程上荡,如下:
ssh作為工具是分為服務(wù)端和客戶端的趴樱,在服務(wù)端它是 sshd,一般占用 22 端口酪捡。我們平常使用的是其客戶端叁征,一般用法為 ssh user@host,然后根據(jù) ssh 的提示逛薇,我們輸入密碼后登陸到服務(wù)器捺疼。
參考文章:
http://www.voidcn.com/article/p-ppggwxwc-or.html
https://www.it610.com/article/3352318.htm
SSH公鑰、私鑰的基本概念
SSH簡介及公鑰金刁、私鑰的基本概念
SSH 的公鑰與私鑰
數(shù)字證書帅涂、公鑰、私鑰概念
公鑰尤蛮、私鑰媳友、證書的基本概念和使用
轉(zhuǎn)載 公鑰、私鑰产捞、證書的基本概念和使用
SSH 公鑰私鑰認(rèn)證
公鑰醇锚,私鑰和數(shù)字證書基本概念
公鑰私鑰
公鑰/私鑰