ssh密鑰對(duì)登錄安全嗎?實(shí)踐篇

在上一篇文章《ssh密鑰對(duì)登錄安全嗎?原理篇》了解了ssh密鑰對(duì)登錄原理后,接下去就是實(shí)踐的問(wèn)題了,這是大部分人更關(guān)心的知識(shí),其中也有一些隱藏的陷阱。

首先要生成一對(duì)密鑰對(duì),ssh-keygen 是 ssh 工具集中的一個(gè)工具,用于生成密鑰對(duì):

$ ssh-keygen -b 2048

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 

-b 是密鑰對(duì)的長(zhǎng)度,越長(zhǎng)越安全,但運(yùn)算速度就會(huì)相應(yīng)變慢,在這個(gè)例子中生成的是一個(gè) RSA 密鑰對(duì),其中 id_rsa 是公鑰(也可以自定義名字),公鑰也叫做 identity 文件,需要放到 ssh 服務(wù)器 ~/.ssh/authorized_keys 文件中(其中 ~ 符號(hào)表示想要以那個(gè)屬主用戶的身份(比如 root 用戶)登錄ssh服務(wù)器),用于證明這個(gè)密鑰對(duì)擁有訪問(wèn) ssh 服務(wù)器的權(quán)限。

在 ssh 登錄的時(shí)候,ssh 客戶端需要讀取公鑰文件,但不會(huì)傳輸。

那么 passphrase 是什么呢?是一個(gè)口令,用于保護(hù)密鑰對(duì),有了口令,即使密鑰對(duì)文件泄漏了,由于攻擊者沒(méi)有口令解密,那么密鑰對(duì)仍然是安全的。

如果圖省事,口令可以為空,如果不為空,則ssh登錄的時(shí)候需要輸入口令。

運(yùn)行完成后,生成的密鑰對(duì)默認(rèn)會(huì)保存到客戶端屬主目錄 ~/.ssh 下,為什么生成在這個(gè)目錄呢?因?yàn)榈卿涷?yàn)證的時(shí)候 ssh 客戶端會(huì)讀取屬主目錄下的公鑰文件。

接下去查看生成的密鑰對(duì)文件,運(yùn)行如下命令:

$ ll ~/.ssh/

-rw-rw-rw-   1 root root   423 Jun  5 16:17 authorized_keys
-rw-------   1 root root  1679 Jun 11 17:31 id_rsa
-rw-r--r--   1 root root   389 Jun 11 17:31 id_rsa.pub

id_rsa.pub 文件就是公鑰,id_rsa 是私鑰,需要注意的就是這二個(gè)文件的權(quán)限問(wèn)題,私鑰權(quán)限必須是 600,嚴(yán)格限制權(quán)限,而 id_rsa 權(quán)限可以適當(dāng)放大,對(duì)于客戶端,~/.ssh 的目錄權(quán)限不會(huì)影響 ssh 登錄,但從安全的角度看,請(qǐng)保持 700 權(quán)限。

公鑰文件上傳到ssh服務(wù)器后,其實(shí)就可以刪除了,因?yàn)樗借€包含公鑰。

接下去就是要將公鑰放到 ssh 服務(wù)器上,一般有三種方法:

1:ssh-copy-id

ssh-copy-id 工具專門用于將公鑰上傳到ssh服務(wù)器的authorized_keys文件中,這個(gè)工具通過(guò)口令登錄的方式上傳公鑰,運(yùn)行很簡(jiǎn)單:

$ ssh-copy-id username@ip

ssh-copy-id 默認(rèn)會(huì)上傳 ~/.ssh/ 目錄下公鑰文件(即 identity 文件 ),ssh服務(wù)器上可能有多個(gè)用戶,那上傳到那個(gè)用戶的.ssh目錄下呢?這根據(jù) username 而定,比如 /home/username 目錄。

如果 identity 文件不在 ~/.ssh 目錄下或者名稱不是默認(rèn)的 id_rsa ,也可以通過(guò) -i 參數(shù)指定文件,比如:

$ ssh-copy-id -i ~/.ssh/id_rsa  username@ip

如果ssh服務(wù)器上的 ssh 打開 StrictModes 嚴(yán)格模式,這個(gè)工具會(huì)更改ssh服務(wù)上的 ~/.ssh目錄, ~/.ssh/authorized_keys 文件的權(quán)限。

重點(diǎn)要注意的是,ssh服務(wù)器用戶的.ssh目錄必須是700 權(quán)限,authorized_keys 文件也必須是 700 權(quán)限,否則 ssh 登錄驗(yàn)證會(huì)失敗,下面會(huì)重點(diǎn)描述這個(gè)問(wèn)題。

2:手動(dòng)上傳公鑰

如果ssh服務(wù)器關(guān)閉了口令登錄方式,就必須使用這種方式了,重點(diǎn)要注意權(quán)限問(wèn)題。

首先拷貝 ~/.ssh/id_rsa.pub 內(nèi)容,然后登錄到ssh服務(wù)器上,再將剪貼板的內(nèi)容粘帖到 ~/.ssh/uthorized_keys 文件中(如果不存在就創(chuàng)建對(duì)應(yīng)的目錄和文件)

最后運(yùn)行下列命令:

$ chmod  go= ~/.ssh/ -R
$ chown username:username  ~/.ssh -R

盡量保證目錄和文件只有對(duì)應(yīng)的ssh用戶才能訪問(wèn),否則ssh登錄會(huì)失敗,原因就是為了保障安全,你總不希望自己的公鑰被ssh服務(wù)器上的其他用戶看到把?

3:使用ssh口令登錄方式手動(dòng)上傳公鑰

如果機(jī)器上沒(méi)有 ssh-copy-id 工具(Windows 10 原生 ssh 客戶端就沒(méi)有),可采用這種方式,其實(shí)也很簡(jiǎn)單,就一條命令,但能讓你了解詳細(xì)的工作過(guò)程,所以比較推薦這種方式:

$ cat ~/.ssh/id_rsa.pub | ssh username@ip "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys

最后就是 ssh 登錄服務(wù)器,驗(yàn)證自己的公鑰是否成功上傳了,執(zhí)行下列命令:

$ ssh username@ip

當(dāng)然也可以指定私鑰文件,比如 :

$ ssh -i /username/.ssh/id_rsa username@ip

如果登錄的時(shí)候還是讓你輸入口令,則很有可能是ssh服務(wù)器上的 ~/.ssh/authorized_keys 權(quán)限有問(wèn)題,請(qǐng)檢查下。

如果還是遇到登錄失敗的問(wèn)題,可以在ssh服務(wù)器上查看日志,比如:

$ /var/log/auth.log | grep "sshd"

相關(guān)文章:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容