¿Ejecutar un script de forma remota en Unix y obtener resultados localmente?

¿Ejecutar un script de forma remota en Unix y obtener resultados localmente?

Necesito ejecutar un script (Tcl o lo que sea) en una máquina Unix remota, desde un shell de comandos (local) de Windows, y quiero que la salida estándar/stderr del script aparezca en la CLI de Windows. El código de salida también sería útil.

¿Es esto posible usando ssh (putty)? ¿O por algún otro medio?

Respuesta1

Este es el valor predeterminado para SSH. Si desea redirigir la salida de forma remota, coloque el símbolo de redirección (normalmente ">") dentro de las comillas del comando.

Por ejemplo:

ssh remote_host "ls > /tmp/file_on_remote_host.txt"

Para guardar la salida localmente en el host de Windows,

ssh remote_host "ls" > .\file_on_local_host.txt

Para combinar stderr de forma remota y guardarlo y stdout localmente,

ssh remote_host "ls 2>&1" > .\combined_output_on_local_host.txt

Respuesta2

Lo que estaba buscando es la patada lateral de Putty,plink.exe. A diferencia de PuTTY, que actúa como un emulador de terminal, plinkactúa como un programa CLI normal (no interactivo).

Al usarlo, podría hacer esto cmd.exey guardar localmente la salida del comando remoto.

\> plink remote_host "ls -l" > log.txt

Lo mejor de todo es que esto funciona parasshasí comoTelnet!

Sólo como referencia, estas son las opciones disponibles:

PuTTY Link: command-line connection utility
Release 0.59
Usage: plink [options] [user@]host [command]
       ("host" can also be a PuTTY saved session name)
Options:
  -V        print version information and exit
  -pgpfp    print PGP key fingerprints and exit
  -v        show verbose messages
  -load sessname  Load settings from saved session
  -ssh -telnet -rlogin -raw
            force use of a particular protocol
  -P port   connect to specified port
  -l user   connect with specified username
  -batch    disable all interactive prompts
The following options only apply to SSH connections:
  -pw passw login with specified password
  -D [listen-IP:]listen-port
            Dynamic SOCKS-based port forwarding
  -L [listen-IP:]listen-port:host:port
            Forward local port to remote address
  -R [listen-IP:]listen-port:host:port
            Forward remote port to local address
  -X -x     enable / disable X11 forwarding
  -A -a     enable / disable agent forwarding
  -t -T     enable / disable pty allocation
  -1 -2     force use of particular protocol version
  -4 -6     force use of IPv4 or IPv6
  -C        enable compression
  -i key    private key file for authentication
  -noagent  disable use of Pageant
  -agent    enable use of Pageant
  -m file   read remote command(s) from file
  -s        remote command is an SSH subsystem (SSH-2 only)
  -N        don't start a shell/command (SSH-2 only)
  -nc host:port
            open tunnel in place of session (SSH-2 only)

Respuesta3

Sí, si utiliza el cliente PuTTY ssh, verá cualquier salida de línea de comando que produzca su secuencia de comandos. Para obtener el código de salida después de ejecutar el script, escriba:

echo $?

Respuesta4

Una respuesta más:

Guarde todos sus comandos de Linux encmdlist.txtarchivo y utilice el siguiente comando.

plink.exe -ssh -pw contraseña[correo electrónico protegido] salida.txt

contraseña==contraseña para el inicio de sesión del dispositivo

tu nombre==nombre de usuario para el inicio de sesión del dispositivo

1.2.3.4==dirección IP del dispositivo

Después de ejecutar este comando, todos sus comandos cmdlist.txt se ejecutarán en el dispositivo remoto y la salida se guardará en el archivo llamado salida.txt.

Asegúrese de mantener plink.exe y cmdlist.txt en el mismo directorio y de apuntar el indicador de dos al mismo directorio.

información relacionada