[Linux]在LinuxCLI使用ssh-keygen生成RSA密鑰-創(chuàng)新互聯(lián)

RSA 是一種公鑰加密算法,在 1977 年由麻省理工學(xué)院的 Ron Rivest, Adi Shamir, Leonard Adleman 三人一起提出,因此該算法命名以三人姓氏首字母組合而成。[Linux]在LinuxCLI
使用ssh-keygen生成RSA密鑰

SSH 是 Secure Shell 縮寫,是建立在應(yīng)用層和傳輸層基礎(chǔ)上的安全協(xié)議,為計(jì)算機(jī)上運(yùn)行的 Shell 提供安全的傳輸和使用環(huán)境。

囊謙網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián),囊謙網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為囊謙上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的囊謙做網(wǎng)站的公司定做!

傳統(tǒng)的 rsh, FTP, POP 和 Telnet 網(wǎng)絡(luò)協(xié)議因?yàn)閭鬏敃r(shí)采用明文,很容易受到中間人方式攻擊。為了防止遠(yuǎn)程傳輸信息出現(xiàn)泄露,SSH 協(xié)議支持對(duì)傳輸?shù)臄?shù)據(jù)進(jìn)行加密,因此它還能防止 DNS 和 IP 欺騙。另外采取 SSH 協(xié)議傳輸?shù)臄?shù)據(jù)可以進(jìn)行壓縮,所以可以加快數(shù)據(jù)傳輸速度。最初 SSH 協(xié)議由芬蘭的 Tatu Yl?nen 在 1995 年設(shè)計(jì)開(kāi)發(fā),目前屬于 SSH Communications Security 擁有,由于版權(quán)原因,1999 年 10 月開(kāi)源軟件 OpenSSH 被開(kāi)發(fā)出來(lái),它已成為事實(shí)上的 SSH 協(xié)議標(biāo)準(zhǔn)實(shí)現(xiàn)(SSH Communications Security 提供的 SSH 軟件使用不同于 OpenSSH 的私鑰格式),也是目前 Linux 標(biāo)準(zhǔn)配置。

基本框架

SSH 協(xié)議主要分成三個(gè)協(xié)議:

1. 傳輸層協(xié)議(The Transport Layer Protocol):傳輸層協(xié)議提供服務(wù)器認(rèn)證,數(shù)據(jù)機(jī)密性,信息完整性等支持。

2. 用戶認(rèn)證協(xié)議(The User Authentication Protocol):用戶認(rèn)證協(xié)議為服務(wù)器提供客戶端的身份鑒別。

3. 連接協(xié)議(The Connection Protocol):連接協(xié)議將加密的信息隧道劃分成若干邏輯通道,提供給更高層應(yīng)用協(xié)議使用。

驗(yàn)證方式

SSH 提供兩種安全驗(yàn)證方式:

1. 基于口令:客戶端使用賬號(hào)和口令登錄服務(wù)器,所有傳輸數(shù)據(jù)都會(huì)被加密。但可能存在偽造服務(wù)器冒充真正的服務(wù)器與客戶端進(jìn)行交互,不能避免中間人攻擊。

2. 基于密鑰:使用一對(duì)密鑰(私鑰 + 公鑰),將公鑰放置到服務(wù)器注冊(cè)。當(dāng)用戶從客戶端登錄服務(wù)器時(shí),服務(wù)器會(huì)接到使用密鑰(即注冊(cè)在服務(wù)器的公鑰)進(jìn)行安全驗(yàn)證請(qǐng)求,服務(wù)器首先比對(duì)從客戶端發(fā)送過(guò)來(lái)的公鑰與在己方注冊(cè)的公鑰是否一致,如果一致,服務(wù)器會(huì)使用該公鑰加密數(shù)據(jù)向客戶端發(fā)起 "挑戰(zhàn)"[1],從而避免中間人攻擊。

OpenSSH 提供的工具

OpenSSH 提供了以下幾個(gè)工具:

1. ssh:實(shí)現(xiàn) SSH 協(xié)議,用以建立安全連接,它替代了較早的 rlogin 和 Telnet。

2. scp, sftp:利用 SSH 協(xié)議遠(yuǎn)程傳輸文件,它替代了較早的 rcp。

3. sshd:SSH 服務(wù)器守護(hù)進(jìn)程,運(yùn)行在服務(wù)器端。

4. ssh-keygen:用以生成 RSA 或 DSA 密鑰對(duì)。

5. ssh-agent, ssh-add:管理密鑰的工具。

6. ssh-keyscan:掃描網(wǎng)絡(luò)中的主機(jī),記錄找到的公鑰。

生成密鑰對(duì)

使用 ssh-keygen 生成一個(gè)密鑰對(duì)(私鑰 + 公鑰):

$ ssh-keygen
Generating public/private rsa key pair.
Enterfile in which to save the key (/home/xavier/.ssh/id_rsa): id_rsa
Enter passphrase (emptyfor no passphrase): 
Enter same passphrase again: 
Your identification has been savedin id_rsa.
Your public key has been savedin id_rsa.pub.
The key fingerprint is:
ce:89:59:3d:a1:3a:99:b3:01:46:78:0f:d1:cc:d4:fa xavier@Qbee-X
The key's randomart image is:+--[ RSA 2048]----+
|    .=..         |
|   . .+ .        |
|  . +  .  .      |
|   o o.  o .     |
|    o ..S o      |
|   . . XE. .     |
|      X +        |
|       =         |
|      .          |
+-----------------+

ssh-keygen 默認(rèn)使用 RSA 算法,長(zhǎng)度為 2048 位,生成一個(gè)私鑰文件 id_rsa 和一個(gè)公鑰文件 id_rsa.pub,兩個(gè)文件默認(rèn)保存在用戶的 ~/.ssh 目錄下。你可以在命令行交互過(guò)程指定密鑰文件路徑,也可以設(shè)置密鑰口令,如果設(shè)置了密鑰口令,在使用密鑰進(jìn)行登錄時(shí),需要輸入口令。

ssh-keygen 支持 -f 選項(xiàng)指定密鑰文件路徑,-t 選項(xiàng)指定加密算法,-b 選項(xiàng)指定密鑰長(zhǎng)度,-N 選項(xiàng)指定密鑰口令,-C 選項(xiàng)指定注釋。

只要將公鑰文件 id_rsa.pub 提交給服務(wù)器,讀取該文件包含的字符串并追加到服務(wù)器端用戶的主目錄 ~/.ssh/authorized_keys 文件中,持有私鑰的客戶端就可以使用 SSH 協(xié)議登錄服務(wù)器了。

SSH 1 協(xié)議支持 RSA 算法,SSH 2 協(xié)議支持 RSA 和 DSA 兩種算法。ssh-keygen 使用 -t 選項(xiàng)來(lái)指明加密算法,rsa1 表示支持 SSH 1,dsa, ecdsa, rsa 表示支持 SSH 2。

生成支持 SSH 1 的 RSA 密鑰:

$ ssh-keygen -t rsa1 -f id-rsa1
Generating public/private rsa1 key pair.
Enter passphrase (emptyfor no passphrase): 
Enter same passphrase again: 
Your identification has been savedin id-rsa1.
Your public key has been savedin id-rsa1.pub.
The key fingerprint is:
c8:81:8f:dc:cd:ba:86:d2:56:e8:d5:13:3f:57:a5:f9 xavier@Qbee-X
The key's randomart image is:+--[RSA1 2048]----+
|                 |
|     .          .|
|    . .        + |
|   . = =.     +  |
|    o.=.So   . . |
|    . o.o o .   E|
|   o +.  . o     |
|  . = ..         |
|   o ..          |
+-----------------+

從私鑰文件生成公鑰文件:

$ ssh-keygen -y -f id-rsa
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDmg/9Hoc98c6AIlEPYK6VqE3ZTlMlfXqn2VgU0NAPXeRmYX+jHYZXA5AxMNTD8KgZIuilK23qzzKBy0hgoO9DDpsBg98Pf4NLkHjTcjpPFX1TBD6RWO/OX/g4uN+gZH1/zoREJa4fit8SSG2V2GoQkqrhfRYCy+a9mQX29ZvOLfYK/aMVjb+yfzLJychdvV3CQkDvkd5R/DHNU6ZQ3pyIEjA/cUQqqmgxQj0f72y8IXv8zesXtjXaaKG17R2oSN1MNDZo/y4m426MYxl4mMQMvM5yR3UvhD93pgNgaR8LY/vspcIeE6cJZsGl21oYtrDZ/GdmF5ulMGwjIDfTJRLvb

修改私鑰文件的注釋和口令(僅支持 RSA1,如果原 RSA1 文件含有注釋或口令,才會(huì)提示修改相應(yīng)的注釋或口令。):

$ ssh-keygen -c 
Enterfile in which the key is (/home/xavier/.ssh/id_rsa): id-rsa1
Key now has comment'Hello'
Enter new comment: HelloWorld
The commentin your key file has been changed.

修改私鑰文件口令(命令:ssh-keygen -p [-P old_password] [-N new_password] [-f keyfile])

$ ssh-keygen -p -f id-rsa
Key has comment'id-rsa'
Enter new passphrase (emptyfor no passphrase): 
Enter same passphrase again: 
Your identification has been saved with the new passphrase.

如果想要取消口令,只需要在輸入密碼為空即可。私鑰口令只是對(duì)私鑰文件的訪問(wèn)權(quán)限,修改和刪除口令并不影響私鑰內(nèi)容。

公鑰指紋

由于公鑰長(zhǎng)度一般都是 1024 或 2048 個(gè)字節(jié),不方便進(jìn)行比對(duì),因此通常使用一個(gè)較短的字符串來(lái)代表它,這個(gè)就是公鑰指紋。公鑰指紋的計(jì)算方法一般就是對(duì)公鑰字符串進(jìn)行 MD5 或者 SHA-1 等摘要計(jì)算得到,一個(gè) 1024 字節(jié)長(zhǎng)度的 RSA 算法公鑰,經(jīng)過(guò)指紋計(jì)算后得到的公鑰指紋只有 128(MD5摘要)字節(jié)或者 160(SHA-1)字節(jié)。

你可以使用 ssh-keygen 工具來(lái)計(jì)算公鑰指紋:

$ ssh-keygen -l -f id_rsa.pub
2048 ce:89:59:3d:a1:3a:99:b3:01:46:78:0f:d1:cc:d4:fa  xavier@Qbee-X (RSA)

如果客戶端是第一次訪問(wèn)服務(wù)器,系統(tǒng)會(huì)提示以下信息:

$ ssh xavier@192.168.1.5
The authenticity of host'192.168.1.5 (192.168.1.5)' can't be established.RSA key fingerprint is 1c:bb:f1:e5:40:34:75:d3:37:b7:8f:b3:4a:6f:b6:47.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added'192.168.1.5' (RSA) to the list of known hosts.

這是因?yàn)榭蛻舳说谝淮芜B接目標(biāo)服務(wù)器,客戶端沒(méi)有目標(biāo)服務(wù)器的公鑰存根,因此系統(tǒng)告訴你目前正在連接的服務(wù)器所使用的公鑰指紋(公鑰指紋代表著公鑰,但長(zhǎng)度較短便于識(shí)別),需要你看看這個(gè)指紋是否正確,如果正確就正式建立連接,如果指紋可疑就不要建立連接。

這個(gè)公鑰指紋是基于服務(wù)器的公鑰計(jì)算而來(lái),服務(wù)器的公鑰一般保存在 /etc/ssh/ssh_host_rsa_key.pub 文件中。如果你事先知道服務(wù)器公鑰,那么你自然可以輕松識(shí)別指紋并決定是否建立連接,但如果是在互聯(lián)網(wǎng)中連接陌生服務(wù)器,你并知道目標(biāo)服務(wù)器的公鑰,這樣就無(wú)法識(shí)別當(dāng)前指紋是不是惡意的中間人服務(wù)器提供的,為了解決這個(gè)問(wèn)題,服務(wù)器端管理員需要提前公示自己的公鑰,或者是從證書(shū)機(jī)構(gòu)申請(qǐng)證書(shū),用戶只要使用公示的公鑰,或者去頒證機(jī)構(gòu)認(rèn)證下載證書(shū)就可以識(shí)別當(dāng)前連接的服務(wù)器是否是虛假的中間人。

一旦你確認(rèn)指紋合法性并建立連接后,客戶端就會(huì)將服務(wù)器的公鑰保存在 $HOME/.ssh/known_hosts 文件中,下次連接時(shí)系統(tǒng)自動(dòng)將對(duì)方發(fā)過(guò)來(lái)的公鑰與已知公鑰進(jìn)行比對(duì),如果正確就直接建立連接,如果不正確將給出警告提示說(shuō)公鑰不匹配并阻止建立連接。

當(dāng)由于公鑰不匹配而無(wú)法建立連接時(shí),可能有幾個(gè)原因,一是目標(biāo)服務(wù)器更換了公鑰;二是目標(biāo)服務(wù)器更換了 IP 地址或者域名,導(dǎo)致你連接到其他主機(jī)致使公鑰不匹配;三是有惡意攻擊者截?cái)嗔诉B接,正在使用偽造的主機(jī)地址試圖欺騙你建立連接。無(wú)論是哪個(gè)原因,你都應(yīng)該保持警惕,謹(jǐn)慎建立連接。

注:

[1] "挑戰(zhàn)" 是指服務(wù)器使用公鑰加密數(shù)據(jù)發(fā)送給客戶端,客戶端使用配對(duì)的私鑰對(duì)數(shù)據(jù)進(jìn)行解密,客戶端成功解密后將答案發(fā)回服務(wù)器進(jìn)行驗(yàn)證,結(jié)果一致則挑戰(zhàn)成功,表示客戶端是合法用戶可以進(jìn)行安全通信。

附:

1. RSA 算法

網(wǎng)頁(yè)名稱:[Linux]在LinuxCLI使用ssh-keygen生成RSA密鑰-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://muchs.cn/article4/dscgie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開(kāi)發(fā)、搜索引擎優(yōu)化面包屑導(dǎo)航、企業(yè)建站、品牌網(wǎng)站設(shè)計(jì)、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都app開(kāi)發(fā)公司