成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用 Shell 在多服務器上批量操作

運維 系統運維 新聞
日常工作中,我們常需要同時在多臺服務器上執行同樣的命令,如對比日志、檢查服務等。這就需要我們有服務器批量操作的能力。

 [[271236]]

需求

日常工作中,我們常需要同時在多臺服務器上執行同樣的命令,如對比日志、檢查服務等。這就需要我們有服務器批量操作的能力。

兩年前寫過一篇文章,shell實現SSH自動登陸 使用 shell 的 expect 命令進行 ssh 登陸,這種方式的靈活性確實非常高,但實現起來比較麻煩,而且單進程阻塞的特性也是它的硬傷,如果使用它進行批量操作,就需要啟動多個 expect 進程,涉及到各個進程和主進程的雙向通信,處理起來非常麻煩。

不過我們可以借用 ssh 公鑰登陸 的能力,方便地實現在多個服務器上批量執行命令。

SSH 協議

說公鑰登陸之前,先來說一下 SSH 協議。

SSH 是一種網絡協議,我們常說的 ssh 一般指其實現,即 OpenSSH,在 shell 中,也就是 ssh 命令。

SSH

Secure Shell(安全外殼協議,簡稱SSH)是一種加密的網絡傳輸協議,可在不安全的網絡中為網絡服務提供安全的傳輸環境。SSH通過在網絡中建立安全隧道來實現SSH客戶端與服務器之間的連接。

SSH 的原理跟 HTTPS 差不多,都是基于 TCP 和 非對稱加密進行的應用層協議。它跟 HTTPS 的不同之處在于 HTTPS 通過 數字證書 和 數字證書認證中心 來防止中間人攻擊,而 ssh 服務器的公鑰沒有人公證,只能通過其公鑰指紋來人工確定其身份。

如下圖所示,我們第一次使用 ssh 登陸某臺服務器時, ssh 會提示我們驗證服務器的公鑰指紋。

使用 shell 在多服務器上批量操作

當我們驗證此公鑰指紋是我們要登陸的服務器后,服務器的公鑰會被添加到 ~/.ssh/known_hosts 里,再登陸時,ssh 檢測到是已認證服務器后就會跳過公鑰驗證階段。

建連過程

關于通信加密的概念,我在之前的文章也有所介紹,參見:再談加密-RSA非對稱加密的理解和使用。至于 SSH 協議的建連過程,則可以參閱:Protocol Basics: Secure Shell Protocol 。

總結起來主要包括以下步驟:

  • TCP 三次握手

  • SSH 協議版本協商

  • 客戶端與服務端的公鑰交換

  • 加密算法協商

  • 客戶端使用對稱加密的密鑰認證

  • 客戶端與服務端安全通信

我使用 tcpdump + wireshark 抓包并查看了一下其 SSH 的建連過程,如下圖所示:

使用 shell 在多服務器上批量操作

不得不再次感嘆 tcpdump + wireshark 是學習網絡協議的真神器。

ssh 工具

ssh

作為工具, ssh 分為服務端和客戶端,在服務端,它是 sshd,一般占用 22 端口。我們平常使用的是其客戶端,一般用法為 ssh user@host,然后根據 ssh 的提示,我們輸入密碼后登陸到服務器。

它的功能非常強大,看其支持參數就知道了。

  1. ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-D [bind_address:]port] [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file] [-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address] [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]] [user@]hostname [command] 

介紹完了 SSH 協議和 ssh 命令,終于說到公鑰登陸了。

公鑰登陸

理解了非對稱加密的原理后,再公鑰登陸會非常簡單。由于公私鑰是唯一的一對,在客戶端保障自己私鑰安全的情況下,服務端通過公鑰就可以完全確定客戶端的真實性,所以要實現公鑰登陸,我們就要先生成一個公私密鑰對。

通過 ssh-keygen 命令來生成密鑰對,為了讓步驟更完整,我把它們暫時保存到工作目錄,默認會保存到 ~/.ssh 目錄。

~ ssh-keygen 

  1. Generating public/private rsa key pair. 
  2. Enter file in which to save the key (/Users/zbs/.ssh/id_rsa): ./test 
  3. Enter passphrase (empty for no passphrase): 
  4. Enter same passphrase again: 
  5. Your identification has been saved in ./test. 
  6. Your public key has been saved in ./test.pub. 
  7. The key fingerprint is: 
  8. SHA256:xxxxx/B17z/xxxxxx zbs@zbs.local 
  9. The key's randomart image is: 
  10. +---[RSA 2048]----+ 
  11. |    o+*.. EO*    | 
  12. |   ....          | 
  13. |    oo+    .o++.o| 
  14. +----[SHA256]-----+ 
  15. ~ ls ./test* 
  16. ./test     ./test.pub 

把私鑰文件 ./test 的內容放到 客戶端的 ~/.ssh/id_rsa,再使用密碼試登陸到服務器后,將公鑰內容 ./test.pub 里的內容放到 服務器的 ~/.ssh/authorized_keys。

再次登陸時,ssh 會自動使用自己的私鑰來認證,也就避免了輸出密碼。

批量操作

公鑰登陸幫我們避免了每次登陸服務器要輸出密碼的麻煩,它同時也解決了每個登陸會話都會同步阻塞的問題,這樣我們就可以利用 ssh 的 ssh user@host command 方式來直接在服務器上執行命令。

同時,在我們擁有一個 ip 列表的情況下,使用 for 循環遍歷 ip 列表,在多個服務器上批量執行命令也就成為了可能。

關于批量執行,已經有很多開源工具了,如使用 python 編寫的 pssh,C++ 編寫的 hss(幫同事做個廣告)等。

多服務器文件合并

前幾天,幫同事在多個服務器上查找日志,需要把在多個服務器上查到的日志都匯總到同一臺機器上進行統計分析。我是用 pssh 登陸的多個服務器,由于日志量太大,查出來的結果輸出到終端上再復制有些不現實,而使用重定向,結果又會重定向到各自的服務器。

scp

這時候可以使用 scp,scp 跟 ssh 是同一家族的命令,也是基于 SSH 協議實現的安全傳輸協議。只要在各個服務器之間互相保存著對方的公鑰,就可以跟 ssh 命令一樣,實現免密操作。

scp 的常見用法是 scp src dst,其中遠程路徑可以表示為 user@host:/path。在批量登陸的情況下,可以使用 grep 等命令先把結果文件輸入到一個文件中,再使用 scp 命令將其復制到同一臺服務器。

為了避免各個服務器的文件名沖突,可以使用 uuidgen | xargs -I {} scp result.log root@ip:/result/{} 將各個服務器的結果復制到不同的文件中,再使用 cat 將 result 文件夾中的文件合并到一塊。

nc

當然,大多數情況下,我們的服務器之間并不會互相保存公鑰,不過 nc 命令可以完美解決這個問題。

nc 的 -k 選項,可以讓 nc 服務端在文件傳輸結束后保持連接不關閉。這樣,我們使用 nc -k -4l port > result.log 啟動一個 nc 服務端,再使用 grep xxx info.log | nc ip port 即可實現結果數據的合并。

小結

本文介紹的各個工具還是屬于開發的小打小鬧,了解多一些工具總是好的。如果做運維工作的話,還是需要依賴 OPS 平臺集成更多功能,實現完整的自動化。

責任編輯:張燕妮 來源: 高效運維
相關推薦

2021-07-26 17:15:05

LinuxConverseen開源

2021-08-05 17:40:05

XpanesLinux服務器

2018-08-15 08:45:38

2017-06-26 19:00:46

LinuxShell命令

2012-10-15 13:40:15

IBMdw

2012-06-08 09:44:09

虛擬化

2012-07-05 09:43:33

服務器虛擬化

2012-09-05 09:35:35

服務器虛擬化

2012-07-03 10:37:44

服務器虛擬化

2018-10-08 08:45:12

Nginx服務器容器

2024-01-10 17:24:00

2021-03-22 16:45:58

服務器命令

2014-05-04 11:02:58

jenkins服務器批量

2010-08-29 20:53:03

DHCP服務器

2011-03-15 09:42:25

dsh批量管理Linux

2010-05-19 10:31:07

IIS服務器

2011-10-09 09:26:04

ubuntursync服務器

2010-07-01 09:47:18

DNS服務器BIND

2024-08-14 17:02:22

Docker容器

2015-11-09 15:42:40

數據中心多操作系統
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人精品一区二区三区 | 中文字幕亚洲精品 | 久久一区二区三区四区 | 一区二区三区视频 | 久久精品99| 精品真实国产乱文在线 | 黄色网址大全在线观看 | 91在线看 | 欧美成人a∨高清免费观看 欧美日韩中 | 91视频国产精品 | 一区二区三区国产在线观看 | av在线播放免费 | 超碰97在线免费 | 九九热精品视频 | 国产一区二区小视频 | 国产婷婷精品 | 国产成人精品a视频一区www | 精品欧美一区二区三区久久久 | 99国产精品久久久久久久 | 国产一级片免费视频 | 免费国产黄网站在线观看视频 | 日韩中文字幕一区二区 | 国产激情在线 | a级在线免费视频 | 日韩欧美在线播放 | 蜜桃臀av一区二区三区 | 日韩一二区在线 | 特级黄一级播放 | 国产精品亚洲一区二区三区在线 | 涩涩鲁亚洲精品一区二区 | 欧美一区二区三区在线播放 | 免费视频成人国产精品网站 | 色网站在线 | 欧美精品一区二区在线观看 | 免费看a| 中文在线播放 | 亚洲精品视频一区二区三区 | 99久久中文字幕三级久久日本 | 国产精品久久久久久久久动漫 | 亚洲成人一区 | 欧美激情精品久久久久久免费 |