問題描述
我有超過 60 到 80 個運行 Ubuntu 的係統。其中一些是 8.04 版,其中一些是最新版本 10.10。現在我們正在將所有舊 Ubuntu 版本升級到新版本。很難打開每個 Ubuntu 係統並記錄舊的 Ubuntu 版本然後升級。我在一個文本文件中有所有這些機器的 IP 地址。所以我正在尋找一個簡單的 bash 腳本來自動完成任務。我期望輸出看起來像這樣:
172.29.34.40 ubuntu 10.04 172.29.34.41 ubuntu 8.04 172.29.34.42 ubuntu 8.10
等等..有人可以幫助我嗎?
最佳方法
您可以使用以下方式獲取 Ubuntu 版本
$ lsb_release -s -d
Ubuntu 10.04.1 LTS
如果您想自動執行此操作,請編寫一個 Bash 腳本,該腳本從標準輸入讀取主機列表並通過 SSH 執行命令。就像是
#!/bin/bash
while read host; do
echo -n "$host: "
ssh "$host" lsb_release -s -d < /dev/null
done
如果您在要連接的所有機器上都有一個共同的用戶帳戶,那麽這應該是您正在尋找的
#!/bin/bash
RUSER="username"
while read host; do
echo -n "$host: "
ssh "$RUSER@$host" lsb_release -s -d < /dev/null
done
將其保存為versions.sh,記住使其可執行(chmod a+x versions.sh
),然後執行
$ versions.sh < ips.txt
次佳方法
假設他們正在運行 SSH 服務器,您可以嘗試根據 SSH 的軟件包版本猜測 Ubuntu 版本:
$ nc IP.IP.IP.IP 22
SSH-2.0-OpenSSH_5.5p1 Debian-4ubuntu5
Ctrl-C
當前版本的 openssh 列在 Launchpad https://launchpad.net/distros/ubuntu/+source/openssh 中:
openssh | 1:4.2p1-7ubuntu3.5 | dapper-updates/main
openssh | 1:4.7p1-8ubuntu3 | hardy-updates/main
openssh | 1:5.1p1-6ubuntu2 | karmic/main
openssh | 1:5.3p1-3ubuntu6 | lucid-updates/main
openssh | 1:5.5p1-4ubuntu5 | maverick-updates/main
openssh | 1:5.8p1-1ubuntu2 | natty/main
所以在我上麵的例子中,帶有 -4ubuntu5
的 Debian 版本的 5.5p1
看起來是一個 Ubuntu 10.10 Maverick 係統。
有些服務器的 /etc/ssh/sshd_config
文件中可能有 “DebianBanner no”,但 OpenSSH 的上遊版本仍然可見,這足以識別係統(到目前為止,每個 Ubuntu 版本都有不同的 OpenSSH 上遊版本)。