濮阳杆衣贸易有限公司

主頁 > 知識庫 > 如何使用shell在多服務(wù)器上批量操作

如何使用shell在多服務(wù)器上批量操作

熱門標(biāo)簽:打400電話怎么辦理收費 宿城區(qū)電話機器人找哪家 10086外包用的什么外呼系統(tǒng) 福州企業(yè)電銷機器人排名 麗江真人語音電話外呼系統(tǒng) 400電話辦理介紹信 上海申請高400開頭的電話 怎么找到?jīng)]有地圖標(biāo)注的店 河南防封號電銷機器人是什么

SSH 協(xié)議

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

SSH 是一種網(wǎng)絡(luò)協(xié)議,我們常說的 ssh 一般指其實現(xiàn),即 OpenSSH,在 shell 中,也就是 ssh 命令。

SSH

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

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

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

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

建連過程

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

總結(jié)起來主要包括以下步驟:

  • TCP 三次握手
  • SSH 協(xié)議版本協(xié)商
  • 客戶端與服務(wù)端的公鑰交換
  • 加密算法協(xié)商
  • 客戶端使用對稱加密的密鑰認(rèn)證
  • 客戶端與服務(wù)端安全通信

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

不得不再次感嘆 tcpdump + wireshark 是學(xué)習(xí)網(wǎng)絡(luò)協(xié)議的真神器。

ssh 工具

ssh

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

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

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 協(xié)議和 ssh 命令,終于說到公鑰登陸了。

公鑰登陸

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

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

~ ssh-keygen

Generating public/private rsa key pair.

Enter file in which to save the key (/Users/zbs/.ssh/id_rsa): ./test

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in ./test.

Your public key has been saved in ./test.pub.

The key fingerprint is:

SHA256:xxxxx/B17z/xxxxxx zbs@zbs.local

The key's randomart image is:

+---[RSA 2048]----+

|    o+*.. EO*    |

|   ....          |

|    oo+    .o++.o|

+----[SHA256]-----+

~ ls ./test*

./test     ./test.pub

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

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

批量操作

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

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

多服務(wù)器文件合并

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

scp

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

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

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

nc

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

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

小結(jié)

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

以上就是如何使用shell在多服務(wù)器上批量操作的詳細(xì)內(nèi)容,更多關(guān)于使用shell在多服務(wù)器上批量操作的資料請關(guān)注腳本之家其它相關(guān)文章!

標(biāo)簽:面試通知 隴南 荊門 連云港 朝陽 運城 遵義 雞西

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《如何使用shell在多服務(wù)器上批量操作》,本文關(guān)鍵詞  如何,使用,shell,在,多,服務(wù)器,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《如何使用shell在多服務(wù)器上批量操作》相關(guān)的同類信息!
  • 本頁收集關(guān)于如何使用shell在多服務(wù)器上批量操作的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    松阳县| 岐山县| 临夏市| 饶河县| 老河口市| 长汀县| 苏尼特左旗| 丹巴县| 明水县| 巴青县| 上饶县| 肇州县| 阿图什市| 德保县| 桃园市| 黄平县| 靖宇县| 高州市| 射洪县| 泰来县| 正安县| 甘谷县| 临洮县| 鄂伦春自治旗| 红安县| 湘阴县| 瑞昌市| 海宁市| 洛阳市| 宿松县| 克什克腾旗| 土默特右旗| 宁安市| 铁力市| 静海县| 类乌齐县| 堆龙德庆县| 安岳县| 朝阳区| 开原市| 丰都县|