我有 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
等等。有人能帮助我吗?
答案1
您可以使用以下方式获取 Ubuntu 版本
$ lsb_release -s -d
Ubuntu 10.04.1 LTS
如果你想自动化执行该操作,可以编写一个 Bash 脚本,从 stdin 读取主机列表并通过 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
答案2
假设他们正在运行 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
因此在我上面的例子中,5.5p1
Debian 版本看起来-4ubuntu5
像是 Ubuntu 10.10 Maverick 系统。
某些服务器的文件中可能包含“DebianBanner no” /etc/ssh/sshd_config
,但 OpenSSH 的上游版本仍然可见,这足以识别系统(到目前为止,每个 Ubuntu 版本都有不同的 OpenSSH 上游版本)。