原文鏈接:信創系統資產清單采集腳本:主機名+IP+MAC 一鍵生成 CSV
Hello,大家好啊!今天給大家帶來一篇在信創終端操作系統上自動批量采集主機名、IP 和 MAC 并導出為 CSV 表格的實戰文章!本方案使用 sshpass 和 Bash 腳本配合,支持從外部 IP 列表和密碼文件中讀取內容,輕松實現批量自動采集,是信創設備臺賬登記、資產管理、批量部署前信息歸檔的利器!歡迎大家點贊、轉發、點個在看!
場景介紹
日常運維工作中,尤其是在以下場景下常常需要批量采集主機信息:
信創設備批量上架后登記 IP、MAC、主機名
網絡規劃前快速收集節點信息
離線環境中準備資產臺賬
自動化部署前環境清查
如果一個個登錄再 copy 太低效,這時候一套 “免登錄 + 自動生成 CSV” 的腳本就很有必要!
1.準備設備IP列表
pdsyw@pdsyw-PC:~/Desktop$ vim pdsyw_ip.txt ? pdsyw@pdsyw-PC:~/Desktop$ cat pdsyw_ip.txt ? 192.168.80.44
用 vim 創建并編輯了一個名為 pdsyw_ip.txt 的文件,內容是目標設備的 IP 地址,每行一個。此文件用于后續腳本讀取目標設備列表。
2.準備對應密碼
pdsyw@pdsyw-PC:~/Desktop$ vim pdsyw_passwd.txt ? pdsyw@pdsyw-PC:~/Desktop$ cat pdsyw_passwd.txt ? 1
創建一個名為 pdsyw_passwd.txt 的文件,里面存放對應設備的登錄密碼。支持:
所有設備共用同一個密碼(如每行內容都為 1)。
每臺設備一個密碼(一一對應 pdsyw_ip.txt 中的 IP)。
腳本通過索引一一讀取對應的密碼。
3.編寫批量采集腳本
pdsyw@pdsyw-PC:~/Desktop$ vim generate_host_list.sh ? pdsyw@pdsyw-PC:~/Desktop$ cat generate_host_list.sh ? #!/bin/bash ?? output="host_list.csv" ? echo "主機名,IP地址,MAC地址" > "$output" ?? mapfile -t ip_list < pdsyw_ip.txt ? mapfile -t pw_list < pdsyw_passwd.txt ?? if [ "${#ip_list[@]}" -ne "${#pw_list[@]}" ]; then ?echo "錯誤:IP 和密碼數量不一致" ?exit 1 ? fi ?? for i in "${!ip_list[@]}"; do ?ip="${ip_list[$i]}" ?password="${pw_list[$i]}" ??echo "正在采集:$ip" ??sshpass -p "$password" ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no pdsyw@"$ip" ' ?h=$(hostname) ?ipaddr=$(ip a | grep "inet " | grep -v "127.0.0.1" | awk "{print \$2}" | cut -d/ -f1 | head -n1) ?mac=$(ip link | awk "/ether/ {print \$2}" | head -n1) ?echo "$h,$ipaddr,$mac" ?' >> "$output" ? done ?? echo "所有采集完成,結果保存在 $output"
讀取 IP 和密碼,遠程登錄每臺主機,采集主機名、IP、MAC 地址,并輸出到 host_list.csv 文件中。關鍵步驟說明:
mapfile -t ip_list < pdsyw_ip.txt ? mapfile -t pw_list < pdsyw_passwd.txt
將 IP 列表和密碼列表分別讀入數組。
if [ "${#ip_list[@]}" -ne "${#pw_list[@]}" ]; then ?echo "錯誤:IP 和密碼數量不一致" ?exit 1 ? fi
校驗 IP 與密碼數量一致,防止數組越界。
sshpass -p "$password" ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no pdsyw@"$ip" ' ?h=$(hostname) ?ipaddr=$(ip a | grep "inet " | grep -v "127.0.0.1" | awk "{print \$2}" | cut -d/ -f1 | head -n1) ?mac=$(ip link | awk "/ether/ {print \$2}" | head -n1) ?echo "$h,$ipaddr,$mac" ? ' >> "$output"
利用 sshpass + ssh 無交互登錄遠程主機,提取主機名(hostname)、IP 地址、MAC 地址。其中用戶pdsyw可以根據實際情況調整。awk "{print $2}" 使用 \ 轉義是為了在嵌套腳本中正確傳遞。
echo "主機名,IP地址,MAC地址" > "$output"
創建 CSV 文件,寫入表頭。
4.安裝環境依賴
pdsyw@pdsyw-PC:~/Desktop$ sudo apt install sshpass -y
sshpass 是一個支持非交互式 SSH 密碼輸入的工具。它允許你用密碼方式批量遠程登錄(適用于沒有設置 SSH 密鑰登錄的設備)。確保主控終端可 SSH 到目標設備。
5.執行效果預覽
pdsyw@pdsyw-PC:~/Desktop$ bash generate_host_list.sh ? 正在采集:192.168.80.44 ? Warning: Permanently added '192.168.80.44' (ECDSA) to the list of known hosts. ? 所有采集完成,結果保存在 host_list.csv
執行采集腳本,控制臺實時輸出當前采集的設備 IP。首次連接會自動將目標 IP 加入 known_hosts 列表。
6.輸出文件
pdsyw@pdsyw-PC:~/Desktop$ cat host_list.csv ? 主機名,IP地址,MAC地址 ? pdsyw-PC,192.168.80.44,00:0c:29:cf:46:a3
采集完成后,輸出的文件內容是一個標準的 CSV 格式,便于后續導入 Excel 或數據庫處理。
7、使用建議
*應用場景* | *建議操作* |
---|---|
臺賬登記 | 使用WPS 表格打開 .csv 直接導入系統平臺 |
網段清查 | 一次性采集全網段設備,過濾活躍主機 |
離線備份 | 將采集腳本與 .csv 一并打包歸檔 |
自動部署前檢查 | 結合設備名 / IP 反查對照配置表 |
通過這篇文章,你掌握了如何在信創終端環境中,使用腳本結合 SSH 免交互方式批量獲取設備主機名、IP 地址和 MAC 地址,并輸出為標準的 .csv 表格,極大提高了信息采集效率,也為后續批量運維打下良好基礎。如果你覺得這篇文章實用,歡迎點贊、轉發、收藏并點個在看,我們下次再見!