Jak zdalnie znaleźć wersję maszyny Ubuntu?

20

Mam ponad 60 do 80 systemów z systemem Ubuntu. Niektóre z nich są w wersji 8.04, a niektóre z najnowszą wersją 10.10. Teraz jesteśmy w trakcie aktualizacji wszystkich starszych wersji Ubuntu do nowszej wersji. Trudno jest włączyć każdy system Ubuntu i robić notatki o starszej wersji Ubuntu, a następnie aktualizować. Mam adresy IP wszystkich tych maszyn w pliku tekstowym. Szukam więc prostego skryptu bash, który zautomatyzuje zadanie. Oczekuję, że dane wyjściowe wyglądałyby tak:

172.29.34.40 ubuntu 10.04
172.29.34.41 ubuntu 8.04
172.29.34.42 ubuntu 8.10

itd. Czy ktoś może mi pomóc?

karthick87
źródło

Odpowiedzi:

31

Możesz pobrać wersję Ubuntu za pomocą

$ lsb_release -s -d
Ubuntu 10.04.1 LTS

Jeśli chcesz to zautomatyzować, napisz skrypt Bash, który odczytuje listę hostów ze standardowego wejścia i wykonuje polecenie przez SSH. Coś jak

#!/bin/bash
while read host; do
   echo -n "$host: "
   ssh "$host" lsb_release -s -d < /dev/null
done

Jeśli masz jedno wspólne konto użytkownika na wszystkich komputerach, z którymi chcesz się połączyć, to powinno być to, czego szukasz

#!/bin/bash
RUSER="username"
while read host; do
   echo -n "$host: "
   ssh "$RUSER@$host" lsb_release -s -d < /dev/null
done

Zapisz go jako version.sh, pamiętając, aby był wykonywalny ( chmod a+x versions.sh) i wykonać

$ versions.sh < ips.txt
Adam Byrtek
źródło
Chcę dane wyjściowe dla wszystkich 80 systemów z systemem Ubuntu, wykonując jedno polecenie lub prosty skrypt. Wiem, że mogę znaleźć wersję ubuntu na jednym komputerze.
karthick87
Już aktualizowałem swoją odpowiedź, kiedy opublikowałeś komentarz. Mam nadzieję, że to pomaga.
Adam Byrtek
btw, $ ip może zawierać user@hostinformacje.
antivirtel
Tak, może być czymkolwiek akceptowanym przez ssh, o ile jest oddzielony spacją.
Adam Byrtek
Czy chcesz, żebym to zrobił jako skrypt bash? A $ IP powinno zawierać adresy IP wszystkich maszyn, prawda?
karthick87
3

Zakładając, że działają na serwerach SSH, możesz spróbować zgadnąć wersje Ubuntu na podstawie wersji pakietowej SSH:

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

Obecne wersje openssh są wymienione w 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

Tak więc w moim powyższym przykładzie 5.5p1z wersją Debiana -4ubuntu5wygląda na system Ubuntu 10.10 Maverick.

Niektóre serwery mogą mieć w swoim /etc/ssh/sshd_configpliku „DebianBanner no” , ale nadal wyświetlana jest wersja OpenSSH, która jest wystarczająca do identyfikacji systemu (do tej pory każda wersja Ubuntu ma inną wersję OpenSSH).

Kees Cook
źródło
Podoba mi się to - jest to potencjalnie najmniej pracochłonne rozwiązanie. Nie wymaga niczego konfigurowania na 80 hostach.
DrSAR,