Sign up with your email address to be the first to know about new products, VIP offers, blog features & more.

Ejecutar programas en un equipo remoto – PsTools

Ejecutar programas en un equipo remoto – PsTools

Hola a todos!

En numerosas ocasiones los administradores de sistemas nos hemos encontrado con la necesidad de ejecutar algún programa, script o comando de forma remota,.

Hasta ahora muchas de estas tareas las estaba realizando mediante la utilización de aplicaciones de control remoto del equipo tales, como teamviwer, vnc, ISL etc…pero que pasa cuando necesitas realizar dichas tareas en diferentes equipos a la vez o cuando  queremos lanzar la tera sin que el usuario lo sepa.

Pensando en esta necesidad, Microsoft publicó un conjonto de herramientas desarrolladas por Mark Russinovich, llamada PsTools. Básicamente son un conjunto de aplicaciones que sirven para administrar equipos de forma remota, mediante la consola de comandos (CMD).

  • PsExec: ejecuta procesos de forma remota
  • PsFile: muestra archivos abiertos de forma remota
  • PsGetSid: muestra el SID de un equipo o un usuario
  • PsInfo: muestra información acerca de un sistema
  • PsKill: elimina los procesos por el nombre o Id. de proceso
  • PsList: muestra información acerca de procesos
  • PsLoggedOn: averigua quién ha iniciado sesión de forma local y a través de recursos compartidos (origen completo incluido)
  • PsLogList: vuelca los registros de eventos
  • PsPasswd: cambia las contraseñas de cuenta
  • PsService: muestra y controla los servicios
  • PsShutdown: apaga y reinicia opcionalmente un equipo
  • PsSuspend: suspende los procesos

Lo que hace el uso de PStools muy interesante es que no hace falta la instalación de software cliente en los equipos remotos y nos permite conectarnos de forma inmediata y como no remotamente, sin desplazamientos. ¡¡ Que grandes somos los administradores de sistemas ¡!!

Solo tener en cuenta los siguientes requisitos de PSttols en el PC remoto:

  • Tener abiertos los puertos TCP:135, TCP:445, UDP:137 y UDP:138. En principio no debería haber bloqueo de estos puertos ya que son los que utiliza Microsoft para comunicaciones propias.
  • Disponer de credenciales de administración en el equipo remoto.
  •  La máquina remota debe tener habilitado el recurso IPC$ y ADMIN$.
  •  La máquina remota debe tener iniciados los servicios NetLogon y Server.

*Nota: Por defecto los equipos que se encuentran dentro un Dominio cumplen con todos los requisitos. 

Podemos descargar el kit de herramientas PSTools desde éste enlace:

Descomprimimos dicho archivo descargado en alguna carpeta en el C:\ (por ejemplo, C:\PSTools ).

 

Tendremos que ejecutar un CMD (Símbolo del sistema) como administrador tal como muestras la imagen y accedemos a la carpeta donde hemos descomprimido la suite, en nuestro caso C:\PSTools

Ahora nos vamos a centrar en el comando psexec que es uno de los que más vamos a hacer servir en nuestra vida de administrador de sistemas. Podemos empezar por ver la ayuda para ello ejecutamos psexec /?

La primera vez que se ejecute el comando, aparecerá una ventana sobre el acuerdo de licencia, pulsaremos sobre “Agree”  para cerrar la ventana.

Ejemplos de ejecución

Empezaremos con un ejemplo sencillo, vamos a mostrar la configuración de red del equipo remoto por pantalla, para ello ejecutamos.

  • psexec \\Equipo -u dominio\usuario -p password  cmd

 

Donde:

  • \\equipo Es el nombre del equipo remoto, aunque también podemos realizar la IP del mismo.
  • El parámetro -u permite colocar un nombre de usuario para autenticarse al equipo remoto. Recordar que dicho usuario debe tener permisos de administrador.
  • El parámetro -p permite colocar el password del usuario suministrado en el parámetro anterior.
  • Y por último el parámetro cmd es el comando a ejecutar.

 

En este ejemplo lo que estamos haciendo es ejecutar un cmd en el equipo remoto desde el cual podremos realizar cualquier tarea por línea de comandos, si probamos de realizar un hostname comprobaremos que nos aparece el nombre del equipo remoto.

Otro ejemplo sería:

  • psexec \\Equipo -u dominio\usuario -p password -n 15  cmd /C xcopy /z /y “\\server\test.txt” “C:/”

 

En este ejemplo lo que estamos haciendo es conectarnos al equipo y le estamos copiando un archivo desde un servidor a local a la c:\ del equipo remoto.

Y por último un ejemplo donde podriamos lanzar un proceso en varios equipos sería el siguiente:

  • psexec @\\server\lista_equipos.txt -u dominio\usuario -p password -n 20 cmd /C \\server\script.bat

Donde:

  • El parámetro @ nos permite acceder a un archivo donde tenemos almacenadas todas las ip o nombres de equipos a los que queremos lanzar el proceso, en mi caso dicho archivo se encuentra en el path \\server\lista_equipos.txt.
  • El parámetro -n es un “time out” de intentos de conexión que fijamos en 20 segundos por conexión por si algunos equipos n están conectados o no se tienen acceso.

Aquí lo que estamos haciendo es lanzar un script llamado “script.bat” a una lista de equipos que está en un archivo en el txt “lista_equipos.txt”, recordamos que para su ejecución necesitamos de los credenciales adecuados para conectarnos a esos equipos con permisos administrativos y por ultimo es recomendable fijar un “time out”, ya que puede ser que alguno de los equipos de nuestro listado este apagado o no conecte en plazo razonable de tiempo, para evitar demorar el proceso hemos fijado un “time out” de 20 segundos.