Tutoriales

Uso de PsExec para ejecutar comandos en computadoras remotas – 2xsoftware

PsExec es una útil herramienta de administración del sistema que le permite ejecutar comandos y ejecutar programas en computadoras remotas. La característica principal de PsExec es que le permite al administrador establecer una sesión interactiva con una computadora remota y usarla para ejecutar programas de forma remota y ejecutar cualquier comando (en segundo plano o en modo interactivo). PsExec solo proporciona una interfaz de consola de línea de comandos para la consola y se puede usar como un reemplazo ligero de telnet.

PsExec es parte del paquete PsTools de Sysinternals. Puedes descargarlo en esta página (la versión actual es PsExec v2.43).

Requisitos previos para usar PsExec

Se deben cumplir los siguientes requisitos para que PsExec se conecte a una computadora remota:

  1. La computadora remota debe tener abiertos los puertos TCP/445 (SMB) y UDP/137 (NETBIOS) y la Uso compartido de archivos e impresoras La excepción debe estar habilitada en el Firewall de Windows Defender. Se recomienda que estos puertos solo se abran para los perfiles de red privada y de dominio para reducir los riesgos de seguridad.
    puedes permitir Uso compartido de archivos e impresoras característica en una computadora remota en la configuración del Firewall de Windows Defender (GUI) o usando el comando:
    Set-NetFirewallRule -DisplayGroup “File And Printer Sharing” -Enabled True -Profile Private

    psexec cmd

  2. Su cuenta debe tener derechos administrativos locales en la computadora remota de destino;
  3. El Servidor Lanman y Estación de trabajo Lanman los servicios deben estar ejecutándose en el host remoto:
    get-service LanmanServer , LanmanWorkstation

    psexec conectarse a la computadora remota

  4. El valor por defecto administrador$ compartir debe estar habilitado en la computadora remota.

Asegúrese de que ADMIN% (administrador remoto) y otros recursos compartidos de administración de Windows (C$, IPC$) estén publicados en la computadora remota:

net view  \DESKTOP-U97VIM5/all

psexec

Asegúrese de que ADMIN% (administrador remoto) y otros recursos compartidos de administración de Windows (C$, IPC$) estén publicados en la computadora remota:

Si la lista de recursos compartidos de administración en la computadora remota está vacía, ejecute el siguiente comando en la computadora remota para publicar los recursos compartidos de administración predeterminados:

reg add HKLMSYSTEMCurrentControlSetServiceslanmanserverparameters /f /v AutoShareWks /t REG_DWORD /d 0

Luego reinicie la computadora remota.

También debe deshabilitar Remote UAC, que bloquea el acceso remoto bajo las cuentas de administrador en las computadoras del grupo de trabajo:

reg add "HKLMSOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem" /v "LocalAccountTokenFilterPolicy" /t REG_DWORD /d 1 /f

¿Cómo instalar PsExec en Windows?

Para usar la herramienta PsExec, simplemente descargue el archivo PSTools.zip de Microsoft y extraiga los archivos PsExec64.exe y PsExec.exe a cualquier carpeta de la computadora del administrador (es conveniente copiarlo a la carpeta ejecutable predeterminada C:WindowsSystem32 ).

Ahora puede conectarse a la computadora remota usando PsExec.

La sintaxis de PsExec es la siguiente:

psexec \RemotePCName [-u username[-p password]] command [arguments]

Puede enumerar todas las opciones de PsExec disponibles simplemente escribiendo psexec en la línea de comando sin ningún parámetro.

psexec cmd remoto como administrador

Nota. Algunos programas antivirus pueden detectar Psexec.exe como malware, PUA (aplicación potencialmente no deseada), herramienta de piratería o herramienta de administración remota. Puede estar seguro de que PsExec no contiene virus si lo ha descargado del sitio web de Microsoft. Sin embargo, PsExec suele ser utilizado por virus y piratas informáticos para explotar las vulnerabilidades de seguridad y tomar el control remoto de las computadoras infectadas.

Si no ha especificado un nombre de usuario y una contraseña, el proceso de PsExec se iniciará en la computadora remota utilizando sus credenciales actuales. PsExec cifra las credenciales de usuario cuando se transmiten a través de la red a partir de la versión 2.1 (en versiones anteriores, la contraseña se enviaba en texto no cifrado).

Debe aceptar el acuerdo de licencia de Sysinternals cuando ejecute PsExec por primera vez.

cómo usar psexec

Para evitar que se muestre el indicador gráfico del acuerdo de licencia, puede agregar el modificador /accepteula la primera vez que ejecuta PsExec.

psexec /accepteula

En el siguiente ejemplo, usaremos PSExec para vaciar la caché de DNS en la máquina remota lon-srv01:

psexec \lon-srv01 ipconfig /flushdns

control remoto psexec cmd

Nota. Si hay espacios en la ruta del programa, debe encerrarlo entre comillas dobles:

psexec \lon-srv01 "c:\Program Files (x86)app1app.exe"

¿Cómo funciona PsExec?

  1. PsExec copia el archivo psexesvc.exe en la carpeta administrativa oculta Admin$ de la computadora remota (C:WindowsSystem32psexesvc.exe);
  2. Luego inicia el servicio PSEXESVC en la computadora remota a través de la API del Administrador de control de servicios de Windows;
  3. Su proceso PsExec local se conecta al servicio PSEXESVC remoto mediante una canalización con nombre, envía su comando a la máquina remota y espera el resultado;
  4. La salida de texto del comando se enviará a su computadora y el código de error se mostrará en su consola. Si el comando fue exitoso, verá el código de salida 0.
  5. PsExec detiene el servicio y lo elimina automáticamente de la computadora remota cuando se completa la tarea.

Pista. Si finaliza la sesión remota de PsExec presionando la tecla Ctrl-C, el servicio PSEXESVC no se eliminará automáticamente. Puede eliminar este servicio manualmente con el comando:

sc.exe \lon-srv01 delete psexesvc

Cuando ejecuta cmd.exe de forma interactiva a través de PsExec con un usuario remoto, no tiene forma de elevar los privilegios (como administrador) cuando el UAC está habilitado. Para ejecutar los comandos con el token elevado de la cuenta, use la opción –h. Esta opción hace que todos los comandos de la sesión de PsExec se ejecuten en el modo «Ejecutar como administrador».

Ejemplos de uso de PsExec

Veamos algunos ejemplos útiles del uso de PsExec para ejecutar comandos en equipos remotos.

Para reiniciar la computadora remota, ejecute el siguiente comando:

psexec \lon-srv01 "cmd.exe" "/c shutdown /f /r/ /t 60"

Si necesita ejecutar varios comandos uno por uno, es mejor ejecutar PsExec en el modo interactivo en la computadora remota. Para hacer esto, ejecute el comando:

psexec \lon-srv01 cmd

Esto abrirá un símbolo del sistema interactivo. Todos los comandos que escriba en la consola se ejecutarán en la computadora remota lon-srv01.

psexec ejecuta el comando en la computadora remota

Para detener una sesión interactiva de PsExec, ejecute el comando:

Exit

Añade el -sin banner opción para ocultar el mensaje de copyright que aparece cada vez que ejecuta psexec:

computadora remota psexec

Para conectarse a una computadora remota con una cuenta específica y ejecutar un shell interactivo, use el siguiente comando:

psexec.exe \lon-srv01 -u user -p password cmd.exe

Incluso puede usar PsExec para ejecutar comandos de PowerShell de forma remota. Por ejemplo, el siguiente comando le devolverá el tamaño del directorio C:PS en la computadora remota:

psexec \lon-srv01 powershell -ExecutionPolicy RemoteSigned -command "'{0:N2}' -f ((gci C:PS | measure Length -Sum).Sum/1MB)"

Nota. Puede usar el cmdlet Invoke-Command en lugar de PsExec para ejecutar comandos de forma remota con PowerShell.

El -C El parámetro le permite especificar el nombre de un archivo local que desea copiar y ejecutar en una computadora remota. Por ejemplo:

psexec \lon-srv01 -c c:psmyapp.exe

Puede usar PsExec como la forma más fácil de instalar software de forma remota. Por ejemplo, tiene un archivo de instalación de cierto programa (por ejemplo, setup.msi). Para copiar el archivo msi a una computadora remota e instalarlo, use la siguiente línea:

psexec.exe \lon-srv01 -c setup.msi –i –s "msiexec.exe /i setup.msi"

De forma predeterminada, PsExec no permite iniciar un programa GUI en el escritorio del usuario remoto. PsExec ejecuta comandos en modo oculto (no verá ninguna ventana o cuadro de diálogo en la computadora remota donde se ejecutan los comandos). Sin embargo, puede cambiar esto con el -i opción.

Por ejemplo, el siguiente comando PsExec abrirá el proceso notepad.exe en la computadora remota y lo mostrará en el escritorio del usuario:

psexec -i \lon-srv01 notepad

PsExec luego esperará a que este proceso se complete en la computadora remota.

PsExec esperará a que se complete un proceso que se ejecuta en una computadora remota. Si los usuarios remotos no cierran las ventanas del bloc de notas en su escritorio, su proceso de PsExec esperará indefinidamente hasta que se complete. Puedes usar el -d cambiar para evitar que PsExec espere a que finalice el proceso remoto:

psexec -i -d \lon-srv01 notepad

Uso de PsExec para ejecutar comandos como cuenta de SISTEMA LOCAL

PsExec tiene una característica interesante y útil. Puede ejecutar cualquier comando o programa en la computadora local bajo la cuenta SYSTEM usando el -s cambiar. Por ejemplo, ejecute la sesión CLI:

psexec -s cmd

Verifique con qué usuario está conectado actualmente con el quién soy dominio. Como puede ver, la consola se inicia desde el NTAutoridadSistema cuenta.

control remoto psexec

Cómo usar PsExec para ejecutar comandos en varias computadoras remotas

PsExec le permite ejecutar el comando en varias computadoras remotas simultáneamente. Para hacer esto, puede configurar los nombres de las computadoras separados por comas:

psexec \PC1,PC2,PC3,PC33 “ipconfig /all”

O guarde una lista de computadoras en un archivo de texto (un nombre de host en cada línea) y luego especifique la ruta a ese archivo:

psexec @c:pscomputer_list.txt ipconfig

Si en vez del nombre del equipo le pones un asterisco (psexec \*), entonces el comando se ejecutará en todas las computadoras de su dominio (puede usar este truco solo en una computadora unida al dominio).

Por ejemplo, el siguiente comando copiará su archivo run.bat en todas las computadoras enumeradas en el archivo de texto c:pscomputer_list.txt y ejecutará este lote (el argumento -h se usa para ejecutar lotes elevados):

PsExec.exe @c:pscomputer_list.txt -h -u .administrator -p $upper0P@$ -c "c:psrun.bat"

Errores comunes de PsExec

Error de acceso denegado a PsExec

En algunos casos, puede obtener el siguiente error al intentar conectar una computadora remota usando PsExec:

No se pudo acceder al nombre de la computadora
La ruta de red no se encontró
Asegúrese de que el porcentaje de administración predeterminado esté habilitado en el nombre de la computadora.

psexec varias computadoras

Asegúrese de que se pueda acceder a la computadora remota a través de la red a través de SMB (puerto TCP 445). Puede probar la conexión a la computadora remota usando el siguiente comando de PowerShell Test-NetConnection:

Test-NetConnection -ComputerName pc99 -Port 445

Compruebe la respuesta del comando. Si TcpTestSucceeded no es igual a True, significa que este puerto está bloqueado por el firewall.

Si su cuenta no tiene los derechos de administrador local en el host remoto de Windows, aparecerá un error:

No se pudo instalar/iniciar el servicio PSEXESVC:
Acceso denegado

PsExec: error de inicio de sesión

Al conectarse a una computadora remota, puede aparecer el siguiente error de PsExec:

PsExec no pudo iniciar cmd.exe en PCName:
Error de inicio de sesión: al usuario no se le ha otorgado el tipo de inicio de sesión solicitado en esta computadora.

En este caso, debe agregar las siguientes opciones a su comando PsExec:

PsExec.exe -i –h  PCName yourcommand

Código de error PSExec 1

Si PsExec devuelve el «código de error 1» cuando ejecuta un archivo por lotes en una computadora remota, lo más probable es que esté usando el comando de salida en su archivo bat. Cambiar el salida comando a

exit / b 0

Dicho comando finaliza el archivo por lotes, cierra cmd.exe y establece el código de retorno en cero.