Linux密鑰rsa加密原理和ssh使用密鑰實現免密碼登錄


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) 實驗開始
  1,在需要免密登陸的主機(主機A)下生成公鑰和私鑰

## -t rsa可以省略,默認就是生成rsa類型的密鑰
ssh-keygen -t rsa

## 生成時指定格式:按以下命令生成 RSA 格式的密鑰對即可
ssh-keygen -m PEM -t rsa

  說明:命令執行后會有提示,輸入三次回車即可,執行完成后會在當前用戶的.ssh目錄下生成兩個文件:id_rsa、id_rsa.pub文件,前者是私鑰文件,后者是公鑰文件(拷貝到其他主機只需要拷貝這個文件的內容)。在linux上以“.”點開頭的文件名或目錄名稱代表具有隱藏屬性,通過ll命令或ls命令看不見。可通過 ll  -a 或者 ls -lath 查看。

 

  2,將公鑰復制到被登陸的主機上的 ~/.ssh/authorized_keys 文件中
拷貝公鑰有兩種方法,其原理都相同:

方法一:使用 ssh-copy-id 直接拷貝

  使用 ssh-copy-id 進行拷貝公鑰非常方便,只需要指定目標主機和目標主機的用戶即可。

## 通過ssh-copy-id工具分發公鑰內容到被登陸機上指定用戶目錄下
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.187.142

  執行這條命令后會自動將登錄主機的公鑰文件內容追加至目標主機中指定用戶(root).ssh目錄下的authorized_keys文件中。這個過程是全自動的,非常方便。需要預先安裝openssh插件。

 

方法二:自己創建文件進行拷貝

  1) 在登錄主機(客戶機)上創建authorized_keys文件並將公鑰追加到該文件。

先cd到登錄機使用的用戶下的 .ssh 目錄,方便操作

## 進入當前用戶的.ssh目錄(按實際情況指定用戶即可)
cd ~/.ssh/
## 將公鑰追加到授權關鍵列表
cat id_rsa.pub >> authorized_keys
## 修改文件權限為600,該文件有規定如果屬組其他人出現可寫則文件就不會生效
chmod 600 authorized_keys 

  2) 在被登錄機的指定用戶家目錄下創建 .ssh 目錄(這里在root用戶下創建,因為要使用密鑰登陸到root用戶)

# 進入當前用戶家目錄(按實際情況指定)
cd  ~/

# 查看有沒有.ssh目錄,一般安裝過openssh都會有
ls  -lath
# 如果確實沒有,手動創建也一樣
mkdir .ssh

##將目錄權限改為700該目錄的權限必須是700才有效
chmod 700 .ssh 

  3) 將登錄機創建的authorized_keys文件拷貝到被登錄機,使用scp

# 登錄機上的.ssh/目錄下操作
scp authorized_keys root@192.168.187.142:/root/.ssh/

authorized_keys 100% 402 576.4KB/s 00:00

當然你也可以直接拷貝登錄機上的公鑰id_rsa.pub內容文本,粘貼到被登錄機上的authorized_keys文件里面粘貼,是一樣的啦。


  3,登錄
使用主機A以root用戶身份登陸到主機B

ssh root@192.168.187.142
# 登錄成功如下
Last login: Wed Feb 13 15:24:30 2019 from 192.168.187.137

首次登錄將彈出保存信息,輸入yes即可,此時已經實現了免密的密鑰登陸。

 

注意事項和說明:

1,上例只能實現主機A免密登陸到主機B的root用戶,如果想讓主機B也免密登錄到主機A,創建密鑰和拷貝步驟相同。

2,密鑰登陸的方式只能登錄被登錄機中 .ssh 目錄下有對應公鑰的用戶,如果想讓所有用戶都可以被登錄則需要將authorized_keys文件的內容追加到其他用戶的 ~/.ssh/authorized_keys 文件中。

3,如果要在登錄機上登錄很多台目標機器,那么將公鑰分發到每一台目標機器上就行,步驟同上。

4,如果使用自己創建的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 root@192.168.187.142

注意:如果使用自己復制的方法,一定要注意.ssh目錄和authorized_keys文件的權限,前者是700,后者是600

3) 使用客戶機ssh連接服務端或者使用ssh協議認證的程序即可實現免密,免交互

注意:要想兩端登錄同時免密,就在主機B(被登陸機)也創建密鑰然后將公鑰拷貝到主機即可。

 

 

linux的無密碼登錄,利用RSA加密原理。使用rsa生成公鑰和私鑰。

可以理解為:公鑰是鎖放在被登錄的服務器上,私鑰是鑰匙放在客戶端。鎖和鑰匙匹配就可以登錄。

1,安裝相關軟件:

yum install ssh

ssh里包含ssh和ssh-keygen

2,在客戶機生成公鑰和私鑰:方法在前面講過,這里省略。生成:id_rsa.pub(公鑰-鎖) 和 id_rsa(私鑰-鑰匙)

3,將公鑰放的被登錄機器:方法在前面講過,這里省略。如果拷貝id_rsa.pub到authorized_keys(注意可能會多拷貝回車,可以拷貝編輯器檢查一下)

4,登錄服務器:  

ssh 目標用戶@目標ip

5,文件介紹;
客戶機端:
  id_rsa.pub(公鑰-鎖)
  id_rsa(私鑰-鑰匙)
  known_hosts(記錄鏈接到對方時,對方給的hostkey,連線會檢查目前對方給的hostkey 與記錄的hostkey是否相同,進行簡單的驗證)
被登錄機端:
  authorized_keys (被登錄機的公鑰放置文件--鎖的位置,可能會有多個鎖)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM