问题描述
我有超过 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 上游版本)。