Comment trouver la version d'une machine Ubuntu à distance?

20

J'ai plus de 60 à 80 systèmes exécutant Ubuntu. Certains d'entre eux sont avec la version 8.04 et certains avec la dernière version 10.10. Maintenant, nous sommes en train de mettre à niveau toutes les anciennes versions d'Ubuntu vers une version plus récente. Il est difficile d'allumer tous les systèmes Ubuntu et de prendre des notes de l'ancienne version d'Ubuntu, puis de mettre à niveau. J'ai les adresses IP de toutes ces machines dans un fichier texte. Je recherche donc un simple script bash qui automatisera la tâche. Je m'attends à ce que la sortie ressemble à ceci:

172.29.34.40 ubuntu 10.04
172.29.34.41 ubuntu 8.04
172.29.34.42 ubuntu 8.10

et ainsi de suite .. Quelqu'un peut-il m'aider?

karthick87
la source

Réponses:

31

Vous pouvez obtenir la version Ubuntu en utilisant

$ lsb_release -s -d
Ubuntu 10.04.1 LTS

Si vous souhaitez automatiser cela, écrivez un script Bash qui lit la liste des hôtes depuis stdin et exécute la commande via SSH. Quelque chose comme

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

Si vous avez un compte utilisateur commun sur toutes les machines auxquelles vous souhaitez vous connecter, c'est ce que vous recherchez

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

Enregistrez-le sous versions.sh, en vous rappelant de le rendre exécutable ( chmod a+x versions.sh) et exécutez

$ versions.sh < ips.txt
Adam Byrtek
la source
Je veux la sortie pour tous les 80 systèmes exécutant ubuntu en exécutant une seule commande ou par un simple script. Je sais trouver la version ubuntu sur une seule machine.
karthick87
J'étais déjà en train de mettre à jour ma réponse lorsque vous avez posté le commentaire. J'espère que cela pourra aider.
Adam Byrtek
btw, $ ip peut contenir des user@hostinformations.
antivirtel
Oui, cela peut être n'importe quoi accepté par ssh, tant qu'il est séparé de l'espace.
Adam Byrtek
Voulez-vous que je le fasse en tant que script bash? Et $ IP devrait contenir les adresses IP de toutes les machines, non?
karthick87
3

En supposant qu'ils exécutent des serveurs SSH, vous pouvez essayer de deviner les versions d'Ubuntu en fonction de la version du package de SSH:

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

Les versions actuelles de openssh sont répertoriées dans 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

Donc, dans mon exemple ci-dessus, 5.5p1avec une version Debian de -4ubuntu5semble être un système Ubuntu 10.10 Maverick.

Certains serveurs peuvent avoir «DebianBanner no» dans leur /etc/ssh/sshd_configfichier, mais la version amont d'OpenSSH est toujours visible, ce qui est suffisant pour identifier le système (chaque version d'Ubuntu a jusqu'à présent une version amont d'OpenSSH différente).

Kees Cook
la source
J'aime ça - c'est potentiellement la solution la moins laborieuse. Il ne vous oblige à rien configurer sur les 80 hôtes.
DrSAR