¿Cómo encontrar la versión de una máquina Ubuntu de forma remota?

20

Tengo más de 60 a 80 sistemas que ejecutan Ubuntu. Algunos de ellos tienen la versión 8.04 y otros tienen la última versión 10.10. Ahora estamos en el proceso de actualizar todas las versiones anteriores de Ubuntu a una versión más nueva. Es difícil encender todos los sistemas Ubuntu y tomar notas de la versión anterior de Ubuntu y luego actualizar. Tengo direcciones IP de todas estas máquinas en un archivo de texto. Así que estoy buscando un script bash simple que automatice la tarea. Espero que la salida se vea así:

172.29.34.40 ubuntu 10.04
172.29.34.41 ubuntu 8.04
172.29.34.42 ubuntu 8.10

y así sucesivamente .. ¿Alguien puede ayudarme?

karthick87
fuente

Respuestas:

31

Puedes obtener la versión de Ubuntu usando

$ lsb_release -s -d
Ubuntu 10.04.1 LTS

Si desea automatizar eso, escriba un script Bash que lea la lista de hosts de stdin y ejecute el comando a través de SSH. Algo como

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

Si tiene una cuenta de usuario común en todas las máquinas a las que desea conectarse, entonces esto debería ser lo que está buscando

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

Guárdelo como versiones.sh, recordando hacerlo ejecutable ( chmod a+x versions.sh) y ejecute

$ versions.sh < ips.txt
Adam Byrtek
fuente
Quiero la salida para todos los 80 sistemas que ejecutan ubuntu ejecutando un solo comando o mediante un script simple. Sé encontrar la versión de ubuntu en una sola máquina.
karthick87
Ya estaba actualizando mi respuesta cuando publicaste el comentario. Espero que ayude.
Adam Byrtek
por cierto, $ ip puede contener user@hostinformación.
antivirtel
Sí, puede ser cualquier cosa aceptada por ssh, siempre que esté separada por espacios.
Adam Byrtek
¿Quieres que lo haga como script bash? ¿Y $ IP debería contener las direcciones IP de todas las máquinas, verdad?
karthick87 01 de
3

Suponiendo que estén ejecutando servidores SSH, podría intentar adivinar las versiones de Ubuntu basadas en la versión del paquete de SSH:

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

Las versiones actuales de openssh se enumeran en 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

Entonces, en mi ejemplo anterior, 5.5p1con una versión Debian de -4ubuntu5parece ser un sistema Ubuntu 10.10 Maverick.

Algunos servidores pueden tener "DebianBanner no" en su /etc/ssh/sshd_configarchivo, pero la versión anterior de OpenSSH sigue siendo visible, lo que es suficiente para identificar el sistema (cada versión de Ubuntu hasta ahora tiene una versión diferente de OpenSSH).

Kees Cook
fuente
Me gusta esto: esta es potencialmente la solución menos laboriosa. No requiere que configure nada en los 80 hosts.
DrSAR