Как найти версию машины с 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

и так далее .. Кто-нибудь может мне помочь?

karthick87
источник

Ответы:

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
Адам Быртек
источник
Я хочу получить вывод для всех 80 систем, работающих под управлением Ubuntu, выполнив одну команду или простой скрипт. Я знаю, как найти версию Ubuntu на одной машине.
karthick87
Я уже обновлял свой ответ, когда вы разместили комментарий. Надеюсь, это поможет.
Адам Byrtek
Кстати, $ ip может содержать user@hostинформацию.
антивиртель
Да, это может быть что угодно, если ssh разделен пробелом.
Адам Быртек
Вы хотите, чтобы я сделал это как скрипт bash? И $ IP должен содержать IP-адреса всех машин, верно?
karthick87
3

Предполагая, что они работают на SSH-серверах, вы можете попытаться угадать версии Ubuntu на основе пакетной версии SSH:

$ 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).

Кис Кук
источник
Мне нравится это - это потенциально наименее трудоемкое решение. Не требуется ничего настраивать на 80 хостах.
DrSAR