????????在我們平時(shí)使用Linux系統(tǒng)時(shí)候,通常使用的Linux SSH登錄方式是用戶名加密碼的登錄方式,今天來(lái)探討另外的一種相對(duì)安全的登錄方式——密鑰登錄。
超過(guò)10余年行業(yè)經(jīng)驗(yàn),技術(shù)領(lǐng)先,服務(wù)至上的經(jīng)營(yíng)模式,全靠網(wǎng)絡(luò)和口碑獲得客戶,為自己降低成本,也就是為客戶降低成本。到目前業(yè)務(wù)范圍包括了:網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì),成都網(wǎng)站推廣,成都網(wǎng)站優(yōu)化,整體網(wǎng)絡(luò)托管,成都小程序開(kāi)發(fā),微信開(kāi)發(fā),手機(jī)APP定制開(kāi)發(fā),同時(shí)也可以讓客戶的網(wǎng)站和網(wǎng)絡(luò)營(yíng)銷(xiāo)和我們一樣獲得訂單和生意!
? ? ????我們知道SSH登錄是用的RSA非對(duì)稱(chēng)加密的,所以我們?cè)赟SH登錄的時(shí)候就可以使用RSA密鑰登錄,SSH有專(zhuān)門(mén)創(chuàng)建SSH密鑰的工具ssh-keygen,下面就來(lái)一睹風(fēng)采。
? ? ????首先進(jìn)入Linux系統(tǒng)的用戶目錄下的,查看當(dāng)中原來(lái)并沒(méi)有所謂的秘鑰文件夾。
????? ?這邊要使用到的有兩條命令,一條是ssh-keygen跟ssh-copy-id,這兩條命令具體的選項(xiàng)如下:
ssh-keygen可用的參數(shù)選項(xiàng)有:
?
? ? ?-a trials
? ? ? ? ? ? ?在使用 -T 對(duì) DH-GEX 候選素?cái)?shù)進(jìn)行安全篩選時(shí)需要執(zhí)行的基本測(cè)試數(shù)量。
? ? ? -B ? ? ?顯示指定的公鑰/私鑰文件的 bubblebabble 摘要。
? ? ? -b bits
? ? ? ? ? ? ?指定密鑰長(zhǎng)度。對(duì)于RSA密鑰,最小要求768位,默認(rèn)是2048位。DSA密鑰必須恰好是1024位(FIPS 186-2 標(biāo)準(zhǔn)的要求)。
? ? ? -C comment
? ? ? ? ? ? ?提供一個(gè)新注釋
? ? ? -c ? ? ?要求修改私鑰和公鑰文件中的注釋。本選項(xiàng)只支持 RSA1 密鑰。
? ? ? ? ? ? ?程序?qū)⑻崾据斎胨借€文件名、密語(yǔ)(如果存在)、新注釋。
? ? ? -D reader
? ? ? ? ? ? ?下載存儲(chǔ)在智能卡 reader 里的 RSA 公鑰。
? ? ?-e ? ? ?讀取OpenSSH的私鑰或公鑰文件,并以 RFC ?SSH 公鑰文件格式在 stdout 上顯示出來(lái)。
? ? ? ? ? ? ?該選項(xiàng)能夠?yàn)槎喾N商業(yè)版本的 SSH 輸出密鑰。
? ? ? -F hostname
? ? ? ? ? ? ?在 known_hosts 文件中搜索指定的 hostname ,并列出所有的匹配項(xiàng)。
? ? ? ? ? ? ?這個(gè)選項(xiàng)主要用于查找散列過(guò)的主機(jī)名/ip地址,還可以和 -H 選項(xiàng)聯(lián)用打印找到的公鑰的散列值。
?
? ? ?-f filename
? ? ? ? ? ? ?指定密鑰文件名。
?
? ? ?-G output_file
? ? ? ? ? ? ?為 DH-GEX 產(chǎn)生候選素?cái)?shù)。這些素?cái)?shù)必須在使用之前使用 -T 選項(xiàng)進(jìn)行安全篩選。
?
? ? ?-g ? ? ?在使用 -r 打印指紋資源記錄的時(shí)候使用通用的 DNS 格式。
?
? ? ?-H ? ? ?對(duì) known_hosts 文件進(jìn)行散列計(jì)算。這將把文件中的所有主機(jī)名/ip地址替換為相應(yīng)的散列值。
? ? ? ? ? ? ?原來(lái)文件的內(nèi)容將會(huì)添加一個(gè)".old"后綴后保存。這些散列值只能被 ssh 和 sshd 使用。
? ? ? ? ? ? ?這個(gè)選項(xiàng)不會(huì)修改已經(jīng)經(jīng)過(guò)散列的主機(jī)名/ip地址,因此可以在部分公鑰已經(jīng)散列過(guò)的文件上安全使用。
?
? ? ?-i ? ? ?讀取未加密的SSH-2兼容的私鑰/公鑰文件,然后在 stdout 顯示OpenSSH兼容的私鑰/公鑰。
? ? ? ? ? ? ?該選項(xiàng)主要用于從多種商業(yè)版本的SSH中導(dǎo)入密鑰。
?
? ? ?-l ? ? ?顯示公鑰文件的指紋數(shù)據(jù)。它也支持 RSA1 的私鑰。
? ? ? ? ? ? ?對(duì)于RSA和DSA密鑰,將會(huì)尋找對(duì)應(yīng)的公鑰文件,然后顯示其指紋數(shù)據(jù)。
?
? ? ?-M memory
? ? ? ? ? ? ?指定在生成 DH-GEXS 候選素?cái)?shù)的時(shí)候最大內(nèi)存用量(MB)。
?
? ? ?-N new_passphrase
? ? ? ? ? ? ?提供一個(gè)新的密語(yǔ)。
?
? ? ?-P passphrase
? ? ? ? ? ? ?提供(舊)密語(yǔ)。
?
? ? ?-p ? ? ?要求改變某私鑰文件的密語(yǔ)而不重建私鑰。程序?qū)⑻崾据斎胨借€文件名、原來(lái)的密語(yǔ)、以及兩次輸入新密語(yǔ)。
?
? ? ?-q ? ? ?安靜模式。用于在 /etc/rc 中創(chuàng)建新密鑰的時(shí)候。
?
? ? ?-R hostname
? ? ? ? ? ? ?從 known_hosts 文件中刪除所有屬于 hostname 的密鑰。
? ? ? ? ? ? ?這個(gè)選項(xiàng)主要用于刪除經(jīng)過(guò)散列的主機(jī)(參見(jiàn) -H 選項(xiàng))的密鑰。
?
? ? ?-r hostname
? ? ? ? ? ? ?打印名為 hostname 的公鑰文件的 SSHFP 指紋資源記錄。
?
? ? ?-S start
? ? ? ? ? ? ?指定在生成 DH-GEX 候選模數(shù)時(shí)的起始點(diǎn)(16進(jìn)制)。
?
? ? ?-T output_file
? ? ? ? ? ? ?測(cè)試 Diffie-Hellman group exchange 候選素?cái)?shù)(由 -G 選項(xiàng)生成)的安全性。
?
? ? ?-t type
? ? ? ? ? ? ?指定要?jiǎng)?chuàng)建的密鑰類(lèi)型。可以使用:"rsa1"(SSH-1) "rsa"(SSH-2) "dsa"(SSH-2)
?
? ? ?-U reader
? ? ? ? ? ? ?把現(xiàn)存的RSA私鑰上傳到智能卡 reader
?
? ? ?-v ? ? ?詳細(xì)模式。ssh-keygen 將會(huì)輸出處理過(guò)程的詳細(xì)調(diào)試信息。常用于調(diào)試模數(shù)的產(chǎn)生過(guò)程。
? ? ? ? ? ? ?重復(fù)使用多個(gè) -v 選項(xiàng)將會(huì)增加信息的詳細(xì)程度(最大3次)。
?
? ? ?-W generator
? ? ? ? ? ? ?指定在為 DH-GEX 測(cè)試候選模數(shù)時(shí)想要使用的 generator
?
? ? ?-y ? ? ?讀取OpenSSH專(zhuān)有格式的公鑰文件,并將OpenSSH公鑰顯示在 stdout 上。
sh-copy-id的參數(shù)有:
?
? ? -i #指定密鑰文件
? ? -p #指定端口,默認(rèn)端口號(hào)是22
? ? -o
? ? user@]hostname #用戶名@主機(jī)名
? ? -f: force mode -- copy keys without trying to check if they are already installed
? ? -n: dry run ? ?-- no keys are actually copied
? ? -h|-?: 顯示幫助
????????????????
????????接下來(lái)我們創(chuàng)建一個(gè)秘鑰,使用ssh-keygen -t rsa生成一個(gè)rsa的非對(duì)稱(chēng)秘鑰。
????????我這邊設(shè)置了一個(gè)比較簡(jiǎn)單的5位密碼作為測(cè)試,12345。
????????接著進(jìn)入賬戶的家目錄,使用ls -a查看已經(jīng)看到秘鑰文件夾已經(jīng)生成。
????????接著進(jìn)入秘鑰文件夾查看,已經(jīng)看到生成的私鑰跟秘鑰的文件。
????????接著要使用ssh-copy命令把公鑰推送到想要登陸的主機(jī)上邊去。具體命令格式為:ssh-copy-id -i 指定推送公鑰文件 用戶名@對(duì)方IP地址。
????????接著我們用root賬戶去登陸對(duì)方的主機(jī)。這邊提示讓你輸入秘鑰的密碼,而不是讓你輸入對(duì)方ROOT賬戶的密碼,現(xiàn)在這么一個(gè)秘鑰登陸的功能就已經(jīng)實(shí)現(xiàn)了。
????? ? 不管是輸入秘鑰密碼還是輸入對(duì)方root賬戶的密碼,這邊都是需要進(jìn)行人機(jī)交互的,怎么要才能實(shí)現(xiàn)免人機(jī)交互呢。這邊要使用ssh-agent bash跟ssh-add命令。
????????
????????最后再?lài)L試用root賬戶登陸對(duì)方的主機(jī),發(fā)現(xiàn)免交互登陸的功能已經(jīng)實(shí)現(xiàn)了。其實(shí)實(shí)現(xiàn)免交互登陸功能還有一個(gè)更方便的方法,就是在設(shè)置密碼的時(shí)候不輸入任何密碼也就是創(chuàng)建一個(gè)空密碼,然后直接拷貝過(guò)去就可以了。