Wie finde ich die Version eines Ubuntu-Rechners aus der Ferne?

20

Ich habe mehr als 60 bis 80 Systeme mit Ubuntu. Einige von ihnen sind mit Version 8.04 und einige mit der neuesten Version 10.10. Jetzt werden alle älteren Ubuntu-Versionen auf eine neuere Version aktualisiert. Es ist schwierig, jedes Ubuntu-System einzuschalten, sich Notizen über ältere Ubuntu-Versionen zu machen und dann ein Upgrade durchzuführen. Ich habe von all diesen Rechnern IP-Adressen in einer Textdatei. Ich suche also ein einfaches Bash-Skript, das die Aufgabe automatisiert. Ich erwarte, dass die Ausgabe so aussehen würde:

172.29.34.40 ubuntu 10.04
172.29.34.41 ubuntu 8.04
172.29.34.42 ubuntu 8.10

und so weiter .. Kann mir jemand helfen?

karthick87
quelle

Antworten:

31

Sie können die Ubuntu-Version mit herunterladen

$ lsb_release -s -d
Ubuntu 10.04.1 LTS

Wenn Sie dies automatisieren möchten, schreiben Sie ein Bash-Skript, das die Liste der Hosts von stdin liest und den Befehl über SSH ausführt. So etwas wie

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

Wenn Sie auf allen Computern, zu denen Sie eine Verbindung herstellen möchten, ein gemeinsames Benutzerkonto haben, sollten Sie nach diesem Konto suchen

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

Speichern Sie es unter dem Namen versions.sh. Denken Sie daran, es ausführbar zu machen ( chmod a+x versions.sh), und führen Sie es aus

$ versions.sh < ips.txt
Adam Byrtek
quelle
Ich möchte die Ausgabe für alle 80 Systeme, auf denen Ubuntu ausgeführt wird, durch Ausführen eines einzelnen Befehls oder durch einfaches Skript. Ich weiß, dass die Ubuntu-Version auf einem einzelnen Computer gefunden werden kann.
karthick87
Ich habe meine Antwort bereits aktualisiert, als Sie den Kommentar gepostet haben. Hoffentlich hilft das.
Adam Byrtek
Übrigens kann $ ipuser@host Informationen enthalten .
Antivirtel
Ja, es kann alles sein, was von ssh akzeptiert wird, solange es durch Leerzeichen getrennt ist.
Adam Byrtek
Soll ich es als Bash-Skript erstellen? Und $ IP sollte die IP-Adressen aller Computer enthalten, richtig?
karthick87
3

Angenommen, sie betreiben SSH-Server, könnten Sie versuchen, Ubuntu-Versionen basierend auf der Paketversion von SSH zu erraten:

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

Aktuelle Versionen von openssh finden Sie unter 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

In meinem obigen Beispiel sieht es 5.5p1mit einer Debian-Version so -4ubuntu5aus, als wäre es ein Ubuntu 10.10 Maverick-System.

Einige Server haben möglicherweise "DebianBanner no" in ihrer /etc/ssh/sshd_configDatei, aber die Upstream-Version von OpenSSH ist immer noch sichtbar, was ausreicht, um das System immer noch zu identifizieren (jede Veröffentlichung von Ubuntu hat bisher eine andere Upstream-Version von OpenSSH).

Kees Cook
quelle
Ich mag das - dies ist möglicherweise die am wenigsten arbeitsintensive Lösung. Es ist nicht erforderlich, dass Sie auf den 80 Hosts etwas einrichten.
DrSAR,