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

来源:https://www.cnblogs.com/ance/archive/2019/02/13/10371848.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)下生成公鑰和私鑰

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

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

 

  1. 將公鑰複製到被登陸的主機上的 ~/.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

 

  1. 登錄

     使用主機Aroot用戶身份登陸到主機B

     #  ssh [email protected]

     Last login: Wed Feb 13 15:24:30 2019 from 192.168.187.137

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

 

  1. 註意事項和說明

     上例只能實現主機A免密登陸到主機Broot用戶,如果想讓主機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(被登陸機)也創建密鑰然後將公鑰拷貝到主機即可。


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

-Advertisement-
Play Games
更多相關文章
  • 題目: “一幫一學習小組”是中小學中常見的學習組織方式,老師把學習成績靠前的學生跟學習成績靠後的學生排在一組。本題就請你編寫程式幫助老師自動完成這個分配工作,即在得到全班學生的排名後,在當前尚未分組的學生中,將名次最靠前的學生與名次最靠後的異性學生分為一組。 輸入格式: 輸入第一行給出正偶數N(≤5 ...
  • C/S結構瞭解 所謂的C/S就是客戶端(client)和伺服器端(server)的簡稱,也就是在基於這個的基礎上編寫相關的代碼;一個就是客戶端一個就是服務端。 TCP(client) 客戶端編寫 因為是在Python2.7的版本所以使用該socket包 import socket 定義地址和埠 t ...
  • 本文講解了 Python 的 property 特性,即一種符合 Python 哲學地設置 getter 和 setter 的方式。 ...
  • 一 Servlet的API的訪問 1 完全解耦和的方式 完全看不到request、response、session。 (1)創建jsp界面 (2)編寫action (3)struts_xml 運行效果圖 調用put方法相當於往request域中存數據註意:這種方式只能獲得像 request sess ...
  • asyncio之Coroutines,Tasks and Future Coroutines and Tasks屬於High-level APIs,也就是高級層的api。 本節概述用於協程和任務的高級非同步api。 Coroutines Coroutines翻譯過來意思是協程,使用async/awai ...
  • 1. eureka相關異常 1.1. 異常信息 1.2. 解決 1. 上述異常我在兩處地方遇到過,一是在集成txLCN分散式服務時,用到eureka註冊的時候,需要額外添加兩個配置類 否則也會報上述錯誤 2. 二是再junit的Test類中,用@SpringBootTest創建測試的時候,若是報上述 ...
  • 前邊我們提到了客戶端加域的操作方法,本章為大家補充域客戶端退域的操作過程,包含圖形化、netdom remove、Powershell三種方法,具體內容如下:圖形化退域方法:1.Win鍵,電腦右鍵屬性:2.系統界面在電腦名稱、域和工作組設置欄選擇"更改設置":3.在系統屬性界面,選擇"更改":4... ...
  • 解決windows憑據無法保存的問題1: 運行-gpedit.msc(組策略)-電腦配置-管理模板-系統-憑據分配 雙擊右側”允許分配保存的憑據用於僅NTLM伺服器身份驗證“ 在彈出的視窗中選中“已啟用“,單擊”顯示“,輸入鍵值”TERMSER/*“ 保存退出後,運行”gpupdate /forc ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...