当前位置: 首页>>技术教程>>正文


bash – 如何远程查找 Ubuntu 机器的版本?

,

问题描述

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/12489.html,未经允许,请勿转载。