SSH批量分發管理

来源:https://www.cnblogs.com/su-root/archive/2018/12/17/10128237.html
-Advertisement-
Play Games

ssh服務認證類型主要有兩個: 基於口令的安全驗證: 基於口令的安全驗證的方式就是大家一直在用的,只要知道伺服器的ssh連接賬戶、口令、IP及開發的埠,預設22,就可以通過ssh客戶端登陸到這台遠程主機上。此時,聯機過程中所傳輸的數據都是加密的。 基於密鑰的安全驗證: 基於密鑰的安全驗證方式是指, ...


ssh服務認證類型主要有兩個:

    基於口令的安全驗證:

  基於口令的安全驗證的方式就是大家一直在用的,只要知道伺服器的ssh連接賬戶、口令、IP及開發的埠,預設22,就可以通過ssh客戶端登陸到這台遠程主機上。此時,聯機過程中所傳輸的數據都是加密的。

    基於密鑰的安全驗證:

  基於密鑰的安全驗證方式是指,需要依靠密鑰,也就是必須事先建立一對密鑰對,然後把公鑰放在需要訪問的目標伺服器上,另外,還需要把私鑰放到ssh的客戶端或對應的客戶端伺服器上。

此時,如果想要連接到這個帶有公鑰的ssh伺服器,客戶端ssh軟體或客戶端伺服器就會向ssh伺服器發出請求,請求用聯機的用戶密鑰進行安全驗證。ssh伺服器收到請求後,會先在ssh伺服器上連接的用戶家目錄下尋找放上去的對應用戶的公鑰,然後把它和連接的ssh客戶端發送過來的公鑰進行比較,如果兩個密鑰一致,ssh伺服器就用密鑰加密“質詢”並把它發給ssh客戶端。ssh客戶端收到“質詢”之後就可以用自己的私鑰解密,再把它發給ssh伺服器。使用這種方式,需要知道聯機用戶的密鑰文件,與地中基於口令驗證的方式相比,第二種方式不需要再網路上傳送口令密碼,所有安全性更高了,這時我們也要註意保護我們的密鑰文件,特別是私鑰文件,一旦被黑客獲取了,危險就很大了。

 

案例:批量分發管理(一把鑰匙開多把鎖)

測試場景:

主機名:nfs-server  網卡eth0:192.168.43.117  用途:中心分發伺服器

主機名:lamp01    網卡eth0:192.168.43.118    用途: 接收客戶端伺服器

主機名:lamp02    網卡eth0:192.168.43.119    用途: 接收客戶端伺服器

主機名:backup    網卡eth0:192.168.43.200    用途: 接收客戶端伺服器

=================================================================

首先需要更改區域網機器的主機名與IP地址都要對應到hosts文件里去,方便訪問解析快。

通過scp命令發向其他機器上。

scp -r /etc/hosts [email protected]: /etc

創建一個分發管理用戶

創建一個密鑰對:(分發機器上創建,切換到分發用戶下創建一對密鑰)

rsa與dsa密鑰類型的區別:

rsa即可以進行加密,也可以進行數字簽名實現認證,而dsa只能用於數字簽名從而實現認證。

su – bqh01

ssh-keygen –t dsa

ssh-keygen是生產密鑰的工具,-t參數指建立密鑰的類型,這是是建立dsa類型密鑰,也可以建立rsa類型密鑰。

此時我們需要把產生的公鑰(鎖)發給區域網中的各個機器上:

ssh-copy-id -i .ssh/id_dsa.pub [email protected]

ssh-copy-id -i .ssh/id_dsa.pub [email protected]

ssh-copy-id -i .ssh/id_dsa.pub [email protected]

如果ssh修改了特殊埠,如8886,那麼用上面的ssh-copy-id命令就無法進行分發公鑰了,如果仍要用ssh-copy-id的話,可以用:

ssh-copy-id –I id_dsa.pub “-p 8886 [email protected]”  //特殊埠分發,要適當加引號。

我們可以上118伺服器上查看是否分發過來了:

ok。

此時我們就可以批量管理各個機器了:

例如查看各個機器上的ip地址:可以寫一個簡單腳本

vi fenfa.sh

ssh -p22 [email protected] /sbin/ifconfig eth0

ssh -p22 [email protected] /sbin/ifconfig eth0

ssh -p22 [email protected] /sbin/ifconfig eth0

簡單腳本:

#!/bin/sh

for n in 118 119 200

do

 ssh –p22 [email protected].$n /sbin/ifconfig eth0

done

ok。

接下來我們分發一個文件:先要把分發的文件拷貝到普通用戶家目錄下

vi fenfa.sh

scp -P22 hosts [email protected]:~

scp -P22 hosts [email protected]:~

scp -P22 hosts [email protected]:~

簡單腳本:

#!/bin/sh

for n in 118 119 200

do

  scp –P22 hosts [email protected].$n:~

done

我們從其他機器上查看是否分發過去了:

 

ok。

當我們批量分發到遠程機器的其他目錄下會出現以下錯誤提示:

錯誤:原因是bqh01沒有/etc下的許可權。批量分發時需要註意許可權問題。

我們可以通過以下方法來解決:

  1、  利用root做ssh key驗證

  2、  利用普通用戶如bqh01sudo提權來做

  3、設置suid對固定命令授權

例如:利用普通用戶如bqh01來做,sudo提權拷貝分發的文件發到遠程對應許可權的目錄下

把普通用戶加入到sudoers里去,並授予rsync許可權(註意:在所有機器上操作)

echo ‘bqh01 ALL=(ALL)  NOPASSWD:/usr/bin/rsync’ >>/etc/sudoers

visudo -c  

我們切換到普通用戶下推送一下hosts到/etc/ceshi下試試看:

出現Connection to 192.168.43.118 closed.這種提示表表示執行成功

我們再從其他機器上查看是否推送過來了:

ok。

可以寫一個分發腳本:

腳本優化:
#!/bin/sh
. /etc/init.d/functions

if [ $# -ne 2 ]
  then
   echo "USAGE:$0 localfile remotedir"
   exit 1
fi
for n in 118 119 200
do
  echo ===============192.168.43.$n==============
 scp -P22 -r $1 [email protected].$n:~ &>/dev/null &&\
 ssh -t [email protected].$n sudo rsync $1 $2 &>/dev/null
  if [ $? -eq 0 ]
   then
    action "fenfa $1 ok" /bin/true
  else
    action "fenfa $1 failed" /bin/false
 fi
done

執行腳本後效果如下:

我們從其他機器上查看是否分發過來了:

ok。

當然我們可以用隧道模式傳輸:rsync -avz hosts -e 'ssh -p 22' [email protected]:~

 

例如:設置suid對固定命令授權(同上方法,只是不用sudo提權,而是設置suid許可權)

我們先去除之前推送過去的文件:

將目標主機上的rsync命令增加s許可權(存在危險)

chmod 4755 /usr/bin/rsync

sh fenfa.sh hosts /etc/ceshi/

 我們從其他機器上查看是否分發過來了:

ok。

ssh批量分發與管理方案小結:適用於(5-70台伺服器)

1、利用root做ssh key驗證

優點:簡單,易用

缺點:安全差,同時無法禁止root遠程連接這個功能。

企業應用:80%的中小型企業在用此方法。

2、利用普通用戶如bqh01來做

先把分發的文件拷貝到伺服器用戶家目錄下,然後sudo提權拷貝分發的文件發到遠程對應許可權的目錄下

優點:安全,無需禁用root遠程連接這個功能。

缺點:配置比較複雜。

3、同方法2,只是不用sudo,而是設置suid對固定命令授權

優點:相對安全

缺點:複雜,安全性較差。任何人都可以處理帶有suid許可權的命令。

在生產場景中ssh適用於:批量分發數據、代碼、管理等用途。

=================================================================


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

-Advertisement-
Play Games
更多相關文章
  • 給定一個二叉樹,判斷其是否是一個有效的二叉搜索樹。 一個二叉搜索樹具有如下特征: 節點的左子樹只包含小於當前節點的數。 節點的右子樹只包含大於當前節點的數。 所有左子樹和右子樹自身必須也是二叉搜索樹。 我們只要判斷每個子樹中的左孩子小於根節點,右孩子大於根節點 還有一個要註意的是,空樹也是二叉搜索樹 ...
  • spring cloud我想做成一個系列,所以spring cloud+eureka後面會慢慢說到的,有興趣的小伙伴可以關註後續! 這一節就簡單說說springboot的熱部署了(我一直想不通為什麼叫做熱部署,看到這名字就嚇退了我繼續學習的欲望!),但是實際上可以把這個看成是一個小技巧。 就是導入一 ...
  • 在 Net Core 2.2 中,官方文檔表示,對 EventListener 這個日誌監視類的內容進行了擴充,同時賦予了跟蹤 CoreCLR 事件的許可權;通過跟蹤 CoreCLR 事件,比如通過跟蹤 CoreCLR 事件,可以瞭解和收集到比如 GC,JIT,ThreadPool,intreop 這... ...
  • 上一章我們分享了k8s的網路代理模式,今天我們來分享一下k8s中的服務發現。 1.環境變數模式的服務發現 k8s預設為我們提供了通過環境變數來實現服務發現的功能,前提是 1.需要service在pod之前創建 2.適用於同一命名空間 1.1創建service 1.2創建pod 1.3驗證 查看環境變 ...
  • 一、操作系統用進程(Processe)分隔正在執行的程式,用線程(Thread)作為操作系統分配處理器時間的基本單元,進程上下文中可以運行多個線程,進程的所有線程共用其虛擬地址空間,所有線程均可執行程式代碼中的任意部分,包括其他線程正在執行的代碼; 1.預設情況下,.NET程式只啟動單個線程,被稱為 ...
  • 1、執行多條SQL語句,實現資料庫事務 2、執行一條計算查詢結果語句,返回查詢結果(object) 3、執行查詢語句,返回SqlDataReader ( 註意:調用該方法後,一定要對SqlDataReader進行Close ) 4、執行查詢語句,返回DataTable 5、執行查詢語句,返回Data ...
  • status屬性返回當前請求的http狀態碼,此屬性僅當數據發送並接收完畢後才可獲取。完整的HTTP狀態碼如下: ...
  • 1 確保自己已經安裝圖形界面,如果沒有請執行命令 2 設置啟動級別 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...