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

来源:https://www.cnblogs.com/henkeyi/archive/2019/03/09/10487553.html
-Advertisement-
Play Games

目錄 1. 公鑰私鑰簡介 2. 使用密鑰進行ssh免密登錄 2.1. 實驗環境 2.2. 開始實驗 3. ssh的兩種登陸方式介紹 3.1. 口令驗證登錄 3.2. 密鑰驗證登錄 4. 總結 1、公私鑰簡介與原理 公鑰和私鑰都屬於非對稱加密演算法的一個實現,這個加密演算法的信息交換過程是: 1) 持有公 ...


目錄

  1. 公鑰私鑰簡介

  2. 使用密鑰進行ssh免密登錄

    2.1. 實驗環境

    2.2. 開始實驗

  3. ssh的兩種登陸方式介紹

    3.1. 口令驗證登錄

    3.2. 密鑰驗證登錄

  4. 總結


 

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)下生成公鑰和私鑰
1 # ssh-keygen -t rsa     ##-t rsa可以省略,預設就是生成rsa類型的密鑰

     說明:命令執行後會有提示,輸入三次回車即可,執行完成後會在當前用戶的.ssh目錄下生成兩個文件:id_rsa、id_rsa.pub文件,前者時私鑰文件,後者是公鑰文件(拷貝到其他主機只需要拷貝這個文件的內容)

 

  1. 將公鑰複製到被登陸的主機上的 ~/.ssh/authorized_keys 文件中

     拷貝公鑰有兩種方法,其原理都相同:

 

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

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

1 # ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.187.142

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

 

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

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

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

1 # cat id_rsa.pub >> authorized_keys
2 # chmod 600 authorized_keys     ##修改文件許可權為600,該文件有規定如果屬組其他人出現可寫則文件就不會生效

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

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

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

1 # scp authorized_keys root@192.168.187.142:/root/.ssh/
2 authorized_keys                                  100%  402   576.4KB/s   00:00

 

  1. 登錄

     使用主機A乙root用戶身份登陸到主機B

1 # ssh root@192.168.187.142
2 Last login: Wed Feb 13 15:24:30 2019 from 192.168.187.137

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

 

  1. 註意事項和說明

     上例只能實現主機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(被登陸機)也創建密鑰然後將公鑰拷貝到主機即可。

 

個人公眾號(linuxjsz)

專註IT技術、知識分享,面試資源共用、講解

只做全網最比心的公眾號,歡迎你的關註!

微信公眾號


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 原來工作中有用到定時任務Quartz,不過是在MVC項目中,現在net core項目中也要用到,就開始改版。中間發現在網上的教程只有執行定時計劃的過程,卻很少有人寫註冊的過程,覺得有點略坑。所以寫此文章一是自己做個記錄,二是希望能幫助到其他人。後面還把此功能做出了多任務定時執行,網上關於net co ...
  • 如果編程是一種興趣的話,那可能真的是樂此不疲。尤其AC時很興奮,看到好的、本來簡單卻寫的複雜要轉個彎的邏輯真的別有洞天,因為考慮的更多。希望對業務邏輯加快熟悉,能實戰吧。 ...
  • 記錄這篇博客的原因是:鳥哥的linux教程中,關於date命令的部分缺少-d這個參數的介紹,並且12章中的shell編寫部分有用到-d參數 date 參數(option)-d與--date=""(雙引號)或--date=''(單引號)的使用具有相同的顯示效果 最後面的輸出中days 與 day 有相 ...
  • 問題描述:在個人PC(windows系統)安裝了虛擬機,虛擬機中安裝了Linux系統,Linux系統中安裝了wireshark和firefox這兩個程式,網上查閱可以通過設置DISPLAY環境變數指向本機顯示。設置完DISPLAY之後,程式還是提示無法打開,再設置Xshell配置後,程式可以在lin ...
  • 1. 安裝MySQL 我先是參考了菜鳥教程上的#Windows 上安裝 MySQL #版塊的安裝教程,不過經歷了種種磨難,我最後是按照#此篇博客#安裝成功的。 這兩篇教程最大的差別是在於下載的版本不同。如下圖: 前者下載的是 Other Downloads里的壓縮包,下載後需要自己配置,過程比較複雜 ...
  • ...
  • 目錄 1. 測試環境 2. 設置LAN區段並測試 2.1. 添加LAN區段 2.2. 在虛擬機中設置靜態IP地址 2.3. 測試同一LAN區段的主機是否可以聯通 2.4. 測試宿主機是否能聯通LAN網段 2.5. 測試NAT網路是否可以聯通LAN網段 VM虛擬機使用LAN區段可以有效的進行虛擬內網局 ...
  • 一、RAID 1、常見RAID (RAID 0、RAID1、RAID5、RAID10) 2、RAID 10 陣列添加 2.1、添加硬碟 2.2、查看系統載入 2.3、mdadm 命令添加RAID陣列 2.4、查看RAID初始化狀態 2.5、格式化RAID 磁碟 2.6、掛在並寫入配置文件 2.7 重 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...