SSH證書(shū)登錄方法詳細(xì)教程
SSH是服務(wù)器登錄工具,密碼登錄和密鑰登錄,都有各自的缺點(diǎn)。SSH還有第三種登錄方法,那就是證書(shū)登錄。很多情況下,它是更合理、更安全的登錄方法,本文介紹證書(shū)登錄的方法,需要的朋友可以參考下。
一、非證書(shū)登錄的缺點(diǎn)
密碼登錄和密鑰登錄,都有各自的缺點(diǎn)。
密碼登錄需要輸入服務(wù)器密碼,這非常麻煩,也不安全,存在被暴力破解的風(fēng)險(xiǎn)。
密鑰登錄需要客戶(hù)端生成證書(shū)的私鑰和公鑰,私鑰放在客戶(hù)端,公鑰上傳到服務(wù)端(遠(yuǎn)程登陸端)。服務(wù)器保存用戶(hù)的公鑰,也需要用戶(hù)保存服務(wù)器公鑰的指紋。這對(duì)于多用戶(hù)、多服務(wù)器的大型機(jī)構(gòu)很不方便,如果有員工離職,需要將他的公鑰從每臺(tái)服務(wù)器刪除。
二、證書(shū)登錄是什么?
證書(shū)登錄就是為了解決上面的缺點(diǎn)而設(shè)計(jì)的。它引入了一個(gè)證書(shū)頒發(fā)機(jī)構(gòu)(Certificate1 authority,簡(jiǎn)稱(chēng) CA),對(duì)信任的服務(wù)器頒發(fā)服務(wù)器證書(shū),對(duì)信任的用戶(hù)頒發(fā)用戶(hù)證書(shū)。
登錄時(shí),用戶(hù)和服務(wù)器不需要提前知道彼此的公鑰,只需要交換各自的證書(shū),驗(yàn)證是否可信即可。
證書(shū)登錄的主要優(yōu)點(diǎn)有兩個(gè):(1)用戶(hù)和服務(wù)器不用交換公鑰,這更容易管理,也具有更好的可擴(kuò)展性。(2)證書(shū)可以設(shè)置到期時(shí)間,而公鑰沒(méi)有到期時(shí)間。針對(duì)不同的情況,可以設(shè)置有效期很短的證書(shū),進(jìn)一步提高安全性。
三、證書(shū)登錄的流程
SSH 證書(shū)登錄之前,如果還沒(méi)有證書(shū),需要生成證書(shū)。具體方法是:(1)用戶(hù)和服務(wù)器都將自己的公鑰,發(fā)給 CA;(2)CA 使用服務(wù)器公鑰,生成服務(wù)器證書(shū),發(fā)給服務(wù)器;(3)CA 使用用戶(hù)的公鑰,生成用戶(hù)證書(shū),發(fā)給用戶(hù)。
有了證書(shū)以后,用戶(hù)就可以登錄服務(wù)器了。整個(gè)過(guò)程都是 SSH 自動(dòng)處理,用戶(hù)無(wú)感知。
第一步,用戶(hù)登錄服務(wù)器時(shí),SSH 自動(dòng)將用戶(hù)證書(shū)發(fā)給服務(wù)器。
第二步,服務(wù)器檢查用戶(hù)證書(shū)是否有效,以及是否由可信的 CA 頒發(fā)。
第三步,SSH 自動(dòng)將服務(wù)器證書(shū)發(fā)給用戶(hù)。
第四步,用戶(hù)檢查服務(wù)器證書(shū)是否有效,以及是否由信任的 CA 頒發(fā)。
第五步,雙方建立連接,服務(wù)器允許用戶(hù)登錄。
四、生成 CA 的密鑰
證書(shū)登錄的前提是,必須有一個(gè) CA,而 CA 本質(zhì)上就是一對(duì)密鑰,跟其他密鑰沒(méi)有不同,CA 就用這對(duì)密鑰去簽發(fā)證書(shū)。
雖然 CA 可以用同一對(duì)密碼簽發(fā)用戶(hù)證書(shū)和服務(wù)器證書(shū),但是出于安全性和靈活性,最好用不同的密鑰分別簽發(fā)。所以,CA 至少需要兩對(duì)密鑰,一對(duì)是簽發(fā)用戶(hù)證書(shū)的密鑰,假設(shè)叫做user_ca,另一對(duì)是簽發(fā)服務(wù)器證書(shū)的密鑰,假設(shè)叫做host_ca。
使用下面的命令,生成user_ca。
# 生成 CA 簽發(fā)用戶(hù)證書(shū)的密鑰
$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/user_ca -C user_ca
上面的命令會(huì)在~/.ssh目錄生成一對(duì)密鑰:user_ca(私鑰)和user_ca.pub(公鑰)。
這個(gè)命令的各個(gè)參數(shù)含義如下。
-t rsa:指定密鑰算法 RSA。-b 4096:指定密鑰的位數(shù)是4096位。安全性要求不高的場(chǎng)合,這個(gè)值可以小一點(diǎn),但是不應(yīng)小于1024。-f ~/.ssh/user_ca:指定生成密鑰的位置和文件名。-C user_ca:指定密鑰的識(shí)別字符串,相當(dāng)于注釋?zhuān)梢噪S意設(shè)置。
使用下面的命令,生成host_ca。
# 生成 CA 簽發(fā)服務(wù)器證書(shū)的密鑰
$ ssh-keygen -t rsa -b 4096 -f host_ca -C host_ca
上面的命令會(huì)在~/.ssh目錄生成一對(duì)密鑰:host_ca(私鑰)和host_ca.pub(公鑰)。
現(xiàn)在,~/.ssh目錄應(yīng)該至少有四把密鑰。
~/.ssh/user_ca~/.ssh/user_ca.pub~/.ssh/host_ca~/.ssh/host_ca.pub
五、CA 簽發(fā)服務(wù)器證書(shū)
有了 CA 以后,就可以簽發(fā)服務(wù)器證書(shū)了。
簽發(fā)證書(shū),除了 CA 的密鑰以外,還需要服務(wù)器的公鑰。一般來(lái)說(shuō),SSH 服務(wù)器(通常是sshd)安裝時(shí),已經(jīng)生成密鑰/etc/ssh/ssh_host_rsa_key了。如果沒(méi)有的話,可以用下面的命令生成。
$ sudo ssh-keygen -f /etc/ssh/ssh_host_rsa_key -b 4096 -t rsa
上面命令會(huì)在/etc/ssh目錄,生成ssh_host_rsa_key(私鑰)和ssh_host_rsa_key.pub(公鑰)。然后,需要把服務(wù)器公鑰ssh_host_rsa_key.pub,復(fù)制或上傳到 CA 所在的服務(wù)器。
上傳以后,CA 就可以使用密鑰host_ca為服務(wù)器的公鑰ssh_host_rsa_key.pub簽發(fā)服務(wù)器證書(shū)。
$ ssh-keygen -s host_ca -I host.example.com -h -n host.example.com -V +52w ssh_host_rsa_key.pub
上面的命令會(huì)生成服務(wù)器證書(shū)ssh_host_rsa_key-cert.pub(服務(wù)器公鑰名字加后綴-cert)。這個(gè)命令各個(gè)參數(shù)的含義如下。
-s:指定 CA 簽發(fā)證書(shū)的密鑰。-I:身份字符串,可以隨便設(shè)置,相當(dāng)于注釋?zhuān)奖銋^(qū)分證書(shū),將來(lái)可以使用這個(gè)字符串撤銷(xiāo)證書(shū)。-h:指定該證書(shū)是服務(wù)器證書(shū),而不是用戶(hù)證書(shū)。-n host.example.com:指定服務(wù)器的域名,表示證書(shū)僅對(duì)該域名有效。如果有多個(gè)域名,則使用逗號(hào)分隔。用戶(hù)登錄該域名服務(wù)器時(shí),SSH 通過(guò)證書(shū)的這個(gè)值,分辨應(yīng)該使用哪張證書(shū)發(fā)給用戶(hù),用來(lái)證明服務(wù)器的可信性。-V +52w:指定證書(shū)的有效期,這里為52周(一年)。默認(rèn)情況下,證書(shū)是永遠(yuǎn)有效的。建議使用該參數(shù)指定有效期,并且有效期最好短一點(diǎn),最長(zhǎng)不超過(guò)52周。ssh_host_rsa_key.pub:服務(wù)器公鑰。
生成證書(shū)以后,可以使用下面的命令,查看證書(shū)的細(xì)節(jié)。
$ ssh-keygen -L -f ssh_host_rsa_key-cert.pub
最后,為證書(shū)設(shè)置權(quán)限。
$ chmod 600 ssh_host_rsa_key-cert.pub
六、CA 簽發(fā)用戶(hù)證書(shū)
下面,再用 CA 簽發(fā)用戶(hù)證書(shū)。這時(shí)需要用戶(hù)的公鑰,如果沒(méi)有的話,客戶(hù)端可以用下面的命令生成一對(duì)密鑰。
$ ssh-keygen -f ~/.ssh/user_key -b 4096 -t rsa
上面命令會(huì)在~/.ssh目錄,生成user_key(私鑰)和user_key.pub(公鑰)。
然后,將用戶(hù)公鑰user_key.pub,上傳或復(fù)制到 CA 服務(wù)器。接下來(lái),就可以使用 CA 的密鑰user_ca為用戶(hù)公鑰user_key.pub簽發(fā)用戶(hù)證書(shū)。
$ ssh-keygen -s user_ca -I <a href="mailto:user@example" target="_blank" rel="nofollow">user@example</a>.com -n user -V +1d user_key.pub
上面的命令會(huì)生成用戶(hù)證書(shū)user_key-cert.pub(用戶(hù)公鑰名字加后綴-cert)。這個(gè)命令各個(gè)參數(shù)的含義如下。
-s:指定 CA 簽發(fā)證書(shū)的密鑰-I:身份字符串,可以隨便設(shè)置,相當(dāng)于注釋?zhuān)奖銋^(qū)分證書(shū),將來(lái)可以使用這個(gè)字符串撤銷(xiāo)證書(shū)。-n user:指定用戶(hù)名,表示證書(shū)僅對(duì)該用戶(hù)名有效。如果有多個(gè)用戶(hù)名,使用逗號(hào)分隔。用戶(hù)以該用戶(hù)名登錄服務(wù)器時(shí),SSH 通過(guò)這個(gè)值,分辨應(yīng)該使用哪張證書(shū),證明自己的身份,發(fā)給服務(wù)器。-V +1d:指定證書(shū)的有效期,這里為1天,強(qiáng)制用戶(hù)每天都申請(qǐng)一次證書(shū),提高安全性。默認(rèn)情況下,證書(shū)是永遠(yuǎn)有效的。user_key.pub:用戶(hù)公鑰。
生成證書(shū)以后,可以使用下面的命令,查看證書(shū)的細(xì)節(jié)。
$ ssh-keygen -L -f user_key-cert.pub
最后,為證書(shū)設(shè)置權(quán)限。
$ chmod 600 user_key-cert.pub
七、服務(wù)器安裝證書(shū)
CA 生成服務(wù)器證書(shū)ssh_host_rsa_key-cert.pub以后,需要將該證書(shū)發(fā)回服務(wù)器,可以使用下面的scp命令,將證書(shū)拷貝過(guò)去。
$ scp ~/.ssh/ssh_host_rsa_key-cert.pub <a href="mailto:root@host" target="_blank" rel="nofollow">root@host</a>.example.com:/etc/ssh/
然后,將下面一行添加到服務(wù)器配置文件/etc/ssh/sshd_config。
HostCertificate /etc/ssh/ssh_host_rsa_key-cert.pub
上面的代碼告訴 sshd,服務(wù)器證書(shū)是哪一個(gè)文件。
重新啟動(dòng) sshd。
$ sudo systemctl restart sshd
# 或者
$ sudo service sshd restart
八、服務(wù)器安裝 CA 公鑰
為了讓服務(wù)器信任用戶(hù)證書(shū),必須將 CA 簽發(fā)用戶(hù)證書(shū)的公鑰user_ca.pub,拷貝到服務(wù)器。
$ scp ~/.ssh/user_ca.pub <a href="mailto:root@host" target="_blank" rel="nofollow">root@host</a>.example.com:/etc/ssh/
上面的命令,將 CA 簽發(fā)用戶(hù)證書(shū)的公鑰user_ca.pub,拷貝到 SSH 服務(wù)器的/etc/ssh目錄。
然后,將下面一行添加到服務(wù)器配置文件/etc/ssh/sshd_config。
TrustedUserCAKeys /etc/ssh/user_ca.pub
上面的做法是將user_ca.pub加到/etc/ssh/sshd_config,這會(huì)產(chǎn)生全局效果,即服務(wù)器的所有賬戶(hù)都會(huì)信任user_ca簽發(fā)的所有用戶(hù)證書(shū)。
另一種做法是將user_ca.pub加到服務(wù)器某個(gè)賬戶(hù)的~/.ssh/authorized_keys文件,只讓該賬戶(hù)信任user_ca簽發(fā)的用戶(hù)證書(shū)。具體方法是打開(kāi)~/.ssh/authorized_keys,追加一行,開(kāi)頭是@cert-authority principals="...",然后后面加上user_ca.pub的內(nèi)容,大概是下面這個(gè)樣子。
@cert-authority principals="user" ssh-rsa AAAAB3Nz...XNRM1EX2gQ==
上面代碼中,principals="user"指定用戶(hù)登錄的服務(wù)器賬戶(hù)名,一般就是authorized_keys文件所在的賬戶(hù)。
重新啟動(dòng) sshd。
$ sudo systemctl restart sshd
# 或者
$ sudo service sshd restart
至此,SSH 服務(wù)器已配置為信任user_ca簽發(fā)的證書(shū)。
九、客戶(hù)端安裝證書(shū)
客戶(hù)端安裝用戶(hù)證書(shū)很簡(jiǎn)單,就是從 CA 將用戶(hù)證書(shū)user_key-cert.pub復(fù)制到客戶(hù)端,與用戶(hù)的密鑰user_key保存在同一個(gè)目錄即可。
十、客戶(hù)端安裝 CA 公鑰
為了讓客戶(hù)端信任服務(wù)器證書(shū),必須將 CA 簽發(fā)服務(wù)器證書(shū)的公鑰host_ca.pub,加到客戶(hù)端的/etc/ssh/ssh_known_hosts文件(全局級(jí)別)或者~/.ssh/known_hosts文件(用戶(hù)級(jí)別)。
具體做法是打開(kāi)ssh_known_hosts或known_hosts文件,追加一行,開(kāi)頭為@cert-authority *.example.com,然后將host_ca.pub文件的內(nèi)容(即公鑰)粘貼在后面,大概是下面這個(gè)樣子。
@cert-authority *.example.com ssh-rsa AAAAB3Nz...XNRM1EX2gQ==
上面代碼中,*.example.com是域名的模式匹配,表示只要服務(wù)器符合該模式的域名,且簽發(fā)服務(wù)器證書(shū)的 CA 匹配后面給出的公鑰,就都可以信任。如果沒(méi)有域名限制,這里可以寫(xiě)成*。如果有多個(gè)域名模式,可以使用逗號(hào)分隔;如果服務(wù)器沒(méi)有域名,可以用主機(jī)名(比如host1,host2,host3)或者 IP 地址(比如11.12.13.14,21.22.23.24)。
然后,就可以使用證書(shū),登錄遠(yuǎn)程服務(wù)器了。
$ ssh -i ~/.ssh/user_key <a href="mailto:user@host" target="_blank" rel="nofollow">user@host</a>.example.com
上面命令的-i參數(shù)用來(lái)指定用戶(hù)的密鑰。如果證書(shū)與密鑰在同一個(gè)目錄,則連接服務(wù)器時(shí)將自動(dòng)使用該證書(shū)。
十一、廢除證書(shū)
廢除證書(shū)的操作,分成用戶(hù)證書(shū)的廢除和服務(wù)器證書(shū)的廢除兩種。
服務(wù)器證書(shū)的廢除,用戶(hù)需要在known_hosts文件里面,修改或刪除對(duì)應(yīng)的@cert-authority命令的那一行。
用戶(hù)證書(shū)的廢除,需要在服務(wù)器新建一個(gè)/etc/ssh/revoked_keys文件,然后在配置文件sshd_config添加一行,內(nèi)容如下。
RevokedKeys /etc/ssh/revoked_keys
revoked_keys文件保存不再信任的用戶(hù)公鑰,由下面的命令生成。
$ ssh-keygen -kf /etc/ssh/revoked_keys -z 1 ~/.ssh/user1_key.pub
上面命令中,-z參數(shù)用來(lái)指定用戶(hù)公鑰保存在revoked_keys文件的哪一行,這個(gè)例子是保存在第1行。
如果以后需要廢除其他的用戶(hù)公鑰,可以用下面的命令保存在第2行。
$ ssh-keygen -ukf /etc/ssh/revoked_keys -z 2 ~/.ssh/user2_key.pub
到此這篇關(guān)于SSH證書(shū)登錄方法詳細(xì)教程的文章就介紹到這了,更多相關(guān)SSH證書(shū)登錄內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
memcached常用命令_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了memcached常用命令,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08
Zookeeper 單機(jī)環(huán)境和集群環(huán)境搭建
這篇文章主要介紹了Zookeeper 單機(jī)環(huán)境和集群環(huán)境搭建過(guò)程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08
Hadoop腳本遠(yuǎn)程控制中SSH常見(jiàn)問(wèn)題詳解
這篇文章主要為大家介紹了Hadoop腳本遠(yuǎn)程控制中SSH常見(jiàn)問(wèn)題詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
聯(lián)想服務(wù)器X3850 X6 配置RAID5陣列圖文方法
這篇文章主要介紹了聯(lián)想服務(wù)器X3850 X6 配置RAID5陣列圖文方法,需要的朋友可以參考下2018-05-05
Git客戶(hù)端TortoiseGit(Windows系統(tǒng))的使用方法
這篇文章主要介紹了Git客戶(hù)端TortoiseGit(Windows系統(tǒng))的使用方法,需要的朋友可以參考下2014-09-09
解決xshell連接服務(wù)器報(bào)找不到匹配的host?key算法問(wèn)題
這篇文章主要介紹了xshell連接服務(wù)器報(bào)找不到匹配的host?key算法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08

