配置免密登陸伺服器
- 2021 年 12 月 25 日
- 筆記
前言
原來自己學習的時候在阿里雲買自己的學習機,一台主機自己瞎折騰。但是參加工作以後管理的主機越來越多了,上伺服器看的頻率也越來越頻繁,雖然有時候shell管理工具可以很方便的保存,但是mac的終端實在是太香了,使用命令聯通萬物,配合一些ssh_config和hosts設置可以輕而易舉的上伺服器,這不比xshell酷和方便嗎😏
免密登陸除了方便適用場景也非常多,公司程式碼一般都是配置ssh拉取,在github上配置了你電腦的公鑰以後拉提起程式碼就不用輸入密碼也不用把密碼記錄到本地。
教程
了解ssh協議
ssh使用的是不對稱加密的一個協議,後面我寫https會詳細介紹,簡單來說兩台主機使用非對稱加密進行通訊,通訊和被通訊的主機都需要擁有不同的秘鑰,一般給發起通訊方給出去的叫做公鑰,自己留的叫做私鑰,這個公鑰和私鑰都是進行解密數據的,為什麼要整這麼麻煩不直接http連接呢,周所周知http是透明協議,他的報文可以是沒有加密的這不安全。利用 SSH 協議可以有效防止遠程管理過程中的資訊泄露問題。
生成公鑰和私鑰
這裡是linux和mac的操作,win可以點擊這裡,查看github官方教程
- 打開終端,然後輸入
ssh-keygen -t rsa -C "www.someget.cn" -b 4096
// 其中-t是後面是加密演算法,默認rsa,我這裡畫蛇添足只是想告訴大家
// -C是加入注釋,一般都是自己的用戶名
// -b是指定秘鑰長度
// 以上參數都是無視,直接輸入ssh-keygen也可以
- 生成完了以後,在終端下面命令, 應該可以看到至少兩個文件,一個是id_rsa還一個是id_rsa.pub,其中後綴為.pub的為公鑰。把這個公鑰發給你需要建立的通訊方,對方就可以和你免密建立連接。
cd ~/.ssh & ll
// 去用戶目錄下面的.ssh查看下面的情況
把公鑰給需要免密的主機
-
問題來了,既然這個.pub是發起通訊方創建的,憑啥你給我.pub你就可以和我建立連接(建立連接意味著可以建立控制關係),剛剛只解決可以解析報文,現在解決如何能同意對方連接。
-
其實我剛剛裡面有三個文件,還有一個authorized_keys的文件,這個文件裡面記錄了別人的公鑰,也就是說只要別人的公鑰在我這個authorized_keys裡面,那麼我就會可以解析對方的報文,並且同意對方連接。再提醒,這個authorized_keys是記錄別人的公鑰的,所以我們的公鑰需要寫到我們要免密登陸的主機上面。
-
那我們剛剛已經生成的公鑰,那我們現在寫入到我們要免密登陸的主機上吧
- 這裡注意,這個公鑰和私鑰都是我之前生成過的,如果你沒生成過它裡面是沒有的,這個authorized_keys是需要自己創建的,還有一個known_hosts這是連接過的資訊,有人連接過這個主機,會自動生成這個文件並且在裡面添加一條記錄
mkdir authorized_keys
echo "你的剛剛複製內容" >> authorized_keys
// 這樣你就完成了配置了
- 最後你就可以直接登陸你的主機了
擴展
-
講道理,這個ssh的非對稱加密只使用公鑰和私鑰來進行鑒權,如果對安全不敏感,你可以分發自己的私鑰、公鑰和authorized_keys文件,這樣在很多集群直接就可以相互通訊,而不需要每一台都生成key,然後再進行每一台互相寫入公鑰。大數據集群直接很多這麼使用,但是這有悖非對稱加密的初衷。
-
如何配置github免密登陸
- 點擊//github.com/settings/keys
- 然後你就可以使用ssh拉取程式碼啦