Fullmenu null

 

12 October 2017

Seguramente os haya surgido la necesidad de comprobar el contenido de unos determinados equipos remotos desde vuestro equipo como por ejemplo ver las trazas de un fichero .log que va dejando la aplicación que habéis instalado, comprobar versiones o propiedades guardadas en un fichero, modificar uno existente y querer comprobar que unos determinados ficheros de configuración apuntan correctamente, etc.

Cuando sólo tienes un equipo que administrar esta tarea no es muy compleja y probablemente la realizas a mano, pero cuando el número de equipos a comprobar crece la tarea se vuelve muy repetitiva y cansada y es cuando piensas en crearte un script que realice esta tarea en todas las máquinas por tí.

Para crear el script que facilite esta tarea vamos a emplear sshoogr.

Esta herramienta nos permite realizar sobre nuestros equipos muchas más funciones de las que vamos a ver en este post, como copiar archivos y directorios, ejecutar comandos remotos …​ os ánimo a que reviseis la documentación que seguro que os será de gran ayuda.

A continuación pasamos a explicar en funcionamiento de nuestro script paso a paso:

  • Añadimos la dependencia de sshoogr:

    @Grab('com.aestasit.infrastructure.sshoogr:sshoogr:0.9.25')
    @GrabConfig(systemClassLoader=true)
    import static com.aestasit.infrastructure.ssh.DefaultSsh.*
  • Creamos la función para leer el fichero:

    def getFile(dir,host){
      remoteSession("user:passwd@$host:22") {// (1)
            result =  remoteFile(dir).text // (2)
         }
      return result.readLines()// (3)
    
    }
    1. Establecemos los parámtros de conexión usuario = user, contraseña = passwd mientras que el servidor es variable.

    2. En la función remoteFile le pasamos por parámetro la ruta complete la fichero.

    3. Con la función readLines obtenemos una lista con el contenido del fichero.

  • Creamos la lista de hosts y el nombre del fichero que queremos leer:

    def hosts = ['server_1','server_2','server_3','server_4','server_5']
    def file = '/var/log/www/access_log'
  • recorremos los host y leemos el archivo en cuestion:

    hosts.each{host->
        getFile(file,host).each{line->
            println line
        }
    }
    Note
    Si te da error al conectar con el host, prueba a desactivar la comprobación estricta de la clave del host:
    options.trustUnknownHosts = true

Script
//tag::dependencies[]
@Grab('com.aestasit.infrastructure.sshoogr:sshoogr:0.9.25')
@GrabConfig(systemClassLoader=true)
import static com.aestasit.infrastructure.ssh.DefaultSsh.*
//end::dependencies[]

options.trustUnknownHosts = true

//tag::config[]
def hosts = ['server_1','server_2','server_3','server_4','server_5']
def file = '/var/log/www/access_log'
//end::config[]

//tag::main[]
hosts.each{host->
    getFile(file,host).each{line->
        println line
    }
}
//end::main[]

//tag::read[]
def getFile(dir,host){
  remoteSession("user:passwd@$host:22") {// (1)
        result =  remoteFile(dir).text // (2)
     }
  return result.readLines()// (3)

}
//end::read[]