如何远程查找Ubuntu计算机的版本?


20

我有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

等等。有人可以帮助我吗?

Answers:


31

您可以使用以下方式获得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

我希望通过执行单个命令或通过简单的脚本为运行ubuntu的所有80个系统提供输出。我知道可以在一台计算机上找到ubuntu版本。
karthick87

当您发表评论时,我已经在更新我的答案。希望能有所帮助。
亚当·伯瑞克

顺便说一句,$ ip可能包含user@host信息。
antivirtel

是的,只要空格隔开,它可以是ssh接受的任何东西。
亚当·伯特

你想让我把它做成bash脚本吗?$ IP应该包含所有机器的IP地址吗?
karthick87

3

假设它们正在运行SSH服务器,则可以尝试根据SSH的软件包版本来猜测Ubuntu版本:

$ nc IP.IP.IP.IP 22
SSH-2.0-OpenSSH_5.5p1 Debian-4ubuntu5
Ctrl-C

当前版本的openssh在启动板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上游版本)。


我喜欢-这可能是劳动强度最小的解决方案。它不需要您在80台主机上进行任何设置。
DrSAR 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.