目錄 1. 公鑰私鑰簡介 2. 使用密鑰進行ssh免密登錄 2.1. 實驗環境 2.2. 開始實驗 3. ssh的兩種登陸方式介紹 3.1. 口令驗證登錄 3.2. 密鑰驗證登錄 4. 總結 1、公私鑰簡介與原理 公鑰和私鑰都屬於非對稱加密演算法的一個實現,這個加密演算法的信息交換過程是: 1) 持有公 ...
目錄
1、公私鑰簡介與原理
公鑰和私鑰都屬於非對稱加密演算法的一個實現,這個加密演算法的信息交換過程是:
1) 持有公鑰的一方(甲)在收到持有私鑰的一方(乙)的請求時,甲會在自己的公鑰列表中查找是否有乙的公鑰,如果有則使用一個隨機字串使用公鑰加密併發送給乙。
2) 乙收到加密的字串使用自己的私鑰進行解密,並將解密後的字串發送給甲。
3) 甲接收到乙發送來的字串與自己的字串進行對比,如過通過則驗證通過,否則驗證失敗。
非對稱加密演算法不能使用相同的密鑰進行解密,也就是說公鑰加密的只能使用私鑰進行解密。
2、使用密鑰進行ssh免密登錄
ssh使用私鑰登錄大致步驟就是:主機A(客戶端)創建公鑰私鑰,並將公鑰複製到主機B(被登陸機)的指定用戶下,然後主機A使用保存私鑰的用戶登錄到主機B對應保存公鑰的用戶。
(1) 實驗環境
兩台主機:
1) 主機A(客戶機):192.168.187.137
2) 主機B(被登陸機):192.168.187.143
(2) 實驗開始
- 在需要免密登陸的主機(主機A)下生成公鑰和私鑰
# ssh-keygen -t rsa ##-t rsa可以省略,預設就是生成rsa類型的密鑰
說明:命令執行後會有提示,輸入三次回車即可,執行完成後會在當前用戶的.ssh目錄下生成兩個文件:id_rsa、id_rsa.pub文件,前者時私鑰文件,後者是公鑰文件(拷貝到其他主機只需要拷貝這個文件的內容)
- 將公鑰複製到被登陸的主機上的 ~/.ssh/authorized_keys 文件中
拷貝公鑰有兩種方法,其原理都相同:
方式一:使用 ssh-copy-id 直接拷貝
使用 ssh-copy-id 進行拷貝公鑰非常方便,只需要指定目標主機和目標主機的用戶即可。
# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
執行這條命令後會自動將登錄主機的公鑰文件內容追加至目標主機中指定用戶(root).ssh目錄下的authorized_keys文件中。這個過程是全自動的,非常方便。
方法二:自己創建文件進行拷貝
1) 在登錄主機(客戶機)上創建authorized_keys文件並將公鑰追加到該文件。
先cd到登錄機使用的用戶下的 .ssh 目錄,方便操作
# cat id_rsa.pub >> authorized_keys
# chmod 600 authorized_keys ##修改文件許可權為600,該文件有規定如果屬組其他人出現可寫則文件就不會生效
2) 在被登錄機的指定用戶家目錄下創建 .ssh 目錄(這裡在root用戶下創建,因為要使用密鑰登陸到root用戶)
# mkdir .ssh
# chmod 700 .ssh ##將目錄許可權改為700該目錄的許可權必須是700才有效
3) 將登錄機創建的authorized_keys文件拷貝到被登錄機,使用scp
# scp authorized_keys [email protected]:/root/.ssh/
authorized_keys 100% 402 576.4KB/s 00:00
- 登錄
使用主機A乙root用戶身份登陸到主機B
# ssh [email protected]
Last login: Wed Feb 13 15:24:30 2019 from 192.168.187.137
首次登錄將彈出保存信息,輸入yes即可,此時已經實現了免密的密鑰登陸。
- 註意事項和說明
上例只能實現主機A免密登陸到主機B的root用戶,如果想讓主機B也免密登錄到主機A,創建密鑰和拷貝步驟相同。
密鑰登陸的方式只能登錄被登錄機中 .ssh 目錄下有對應公鑰的用戶,如果想讓所有用戶都可以被登錄則需要將authorized_keys文件的內容追加到其他用戶的 ~/.ssh/authorized_keys 文件中。
如果使用自己創建的authorized_keys文件進行複製公鑰則要嚴格設置許可權,許可權不正確會導致文件無法使用,也就無法進行密鑰驗證。
3、 ssh的兩種登陸方式介紹
(1) 口令驗證登錄
(2) 密鑰驗證登錄
密鑰驗證的前提需要登陸主機生成一對密鑰(公鑰和私鑰),並將公鑰放置在伺服器上。
4、 總結
ssh密鑰登錄可以實現免密登錄,免密登陸有很多用途:例如scp免認證、rsync備份免交互等一切使用ssh認證的地方均可以免交互,也就實現了自動化。
密鑰認證的大概步驟
1) 客戶端(登錄主機)生成一對密鑰:# ssh-keygen
2) 將客戶機的公鑰複製到服務端(被登陸主機)要登錄的用戶的 ~/.ssh/authorized_keys 文件中:# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
註意:如果使用自己複製的方法,一定要註意.ssh目錄和authorized_keys文件的許可權,前者是700,後者是600
3) 使用客戶機ssh連接服務端或者使用ssh協議認證的程式即可實現免密,免交互
註意:要想兩端登錄同時免密,就在主機B(被登陸機)也創建密鑰然後將公鑰拷貝到主機即可。