使用金鑰來和伺服器通訊

丁少华發表於2024-10-12

前言

一般情況下,我們要連結伺服器除了三方的GUI工具 如 xshell、finalshell外。
我們還會使用一些沒有UI的終端去連結,比如windows的powerShell、mac的Terminal、ios的serverCat(非自帶)和andriod的termius (非自帶)等等。

我們買的伺服器一般都預裝了openSSH(以及其依賴和OpenSSL),它就是遠端連線相關外掛。
ssh不僅支援賬號密碼的連線方式,還支援更為優秀的金鑰連結。

ssh的配置檔案在 /etc/ssh/sshd_config 這個檔案中,常見的配置如

...
Port 31825 # ssh 服務埠號
PermitRootLogin yes # 開啟root賬號
PasswordAuthentication yes # 允許賬密登入
PubkeyAuthentication yes # 允許金鑰登入
AuthorizedKeysFile	.ssh/authorized_keys # 授信任的(公)金鑰列表

ssh的賬密登入還是挺簡單,只需要在客戶端上執行 ssh root@192.168.3.241 ,即可發起 連結遠端既伺服器的請求(第一次登入時可能會詢問你是否接受新的主機指紋,輸入yes確認即可),但是缺點相對明顯,每次ssh連結請求都需要輸入密碼,安全性不高,所以引出了我們接下來的 金鑰登入。

客戶端生成金鑰

macOS和Linux通常自帶OpenSSH,Windows在Win10以後,也自帶OpenSSH,所以我們直接使用終端進行 金鑰對 生成:

ssh-keygen
# 過程會產生一些互動,我們一路回車預設即可,但為了方便深入學習 我將互動詢問記錄下來瞭如下:
# Enter file in which to save the key:金鑰存放地址,預設為當前使用者目錄下的.ssh資料夾下。
# Enter passphrase:保護私鑰的密碼,一般留空,直接和上面一樣回車即可。
# Enter same passphrase again:確認私鑰密碼

最終會在會生一對金鑰-> 公鑰+私鑰:
.
id_rsa:生成的私鑰,保留在客戶端即可,理應誰也不給。
id_rsa.pub:生成的公鑰,開啟後,複製內容,後文部署到伺服器上(後邊講)。

服務端部署公鑰

複製如上客戶端生成的 公鑰內容,到伺服器的 ~/.ssh/authorized_keys 檔案中。

如果你要是嫌手動麻煩,客戶端可以使用 ssh-copy-id user@serverIp 將自己的公鑰推送到服務端,不過這個過程需要輸入服務端的密碼。

客戶端連結服務端

此時,直接在客戶端輸入連結服務端的ssh請求,將不會再彈出輸入密碼的請求,而是直接連結上,如

ssh root@192.168.3.241

總結

客戶端建立金鑰對,將其中的公鑰給遠端端(遠端端並將其放入自己的好友管理中[authorized_keys]),後續客戶端就可以控制遠端端了。
擬人化來說就是 相當於你客戶端提前給遠端端遞了個名片認識了下,後續客戶端直接就找遠端端辦事了。

參考

https://mintimate.cn/2021/12/03/connectToLinux
https://blog.csdn.net/h1008685/article/details/137458453

相關文章