Bash

如何自動連接到多個網路設備、執行命令並將輸出保存到文件?

  • July 16, 2019

我必須在大約 1000 個網路設備上執行命令並將輸出保存到文件中。在一個文件中,我列出了必須使用 SSH 連接的所有網路設備名稱。然後我必須執行一個命令,show interface description比如說,然後將輸出保存到文件中。這些設備都設置了一個通用的使用者名和密碼,在所有設備上都是相同的。所以基本上我需要一個腳本來在列表文件中的所有設備上執行這些命令:

ssh user@device1
password: passwordhere
user@device1> show interface description
user@device1> exit

然後將所有輸出保存到文件中。我正在使用紅帽企業伺服器。

您需要自動化的主要事情是輸入ssh密碼。我知道您可以嘗試兩種方法,設置無密碼ssh或安裝sshpass

  • 用於sshpass輸入密碼。如果您設置了DAG 儲存庫,您應該可以使用 yum 進行安裝:
yum install sshpass

如果沒有,您可以直接下載 RPM或添加儲存庫然後安裝:

  1. 下載 rpmforge-release 包。選擇以下兩個連結之一,選擇與您的主機架構相匹配。如果您不確定要使用哪一個,您可以使用以下命令檢查您的架構uname -i

  2. 安裝 DAG 的 GPG 密鑰

rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
 安裝下載的包
m -i rpmforge-release-0.5.2-2.el6.rf.*.rpm
 安裝`sshpass`
m install sshpass

`安裝後,例如`sshpass`,給定一個名為 的文件`ips.txt`,其中每行包含一個設備的名稱或 IP,您可以像這樣自動執行該過程:

while read ip; do echo -n “$ip: " >> local_file.log; sshpass -p ‘your password’ ssh user@$ip remote_command >> local_file.log done < ips.txt

* `ssh`或者,您可以為每個設備設置無密碼並跳過安裝`sshpass`:


  1. 設置無密碼`ssh`
  
  
  
h-keygen -t rsa
ile read ip; do 
h-copy-id -i ~/.ssh/id_rsa.pub user@$ip; 
ne &lt; ips.txt
 執行你的工作
ile read ip; do 
ho -n "$ip: " &gt;&gt; local_file.log;
h user@$ip remote_command &gt;&gt;local_file.log
ne &lt; ips.txt

引用自:https://unix.stackexchange.com/questions/76942