Ejecutar remotamente script en Unix, obtener salida localmente?

45

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

¿Es esto posible usando ssh (masilla)? O por cualquier otro medio?

¡Gracias!

Cristi Diaconescu
fuente

Respuestas:

44

Este es el valor predeterminado para SSH. Si desea redirigir la salida de forma remota, coloque el símbolo de redireccionamiento (generalmente ">") 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
kmarsh
fuente
¿Es posible hacer esto con putty.exe? Es decir, funciona como un programa CLI "normal" en lugar del predeterminado, que es emular un terminal.
Cristi Diaconescu
Me metí en un sistema Windows 2003 y ejecuté la línea de comando, sí. El host tenía instalada la versión de HP del servidor SSH para admitir sus herramientas de administración del sistema. Si solo tiene un cliente SSH, entonces todo se está ejecutando en el sistema remoto.
kmarsh
1
Esto también funciona para una máquina local que no sea Windows.
shiri
Excepto por la ruta de la barra invertida, sí.
kmarsh 01 de
20

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

Utilizándolo, podría hacer esto cmd.exey obtener la salida del comando remoto guardada localmente.

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

Lo mejor de todo, ¡esto funciona tanto para ssh como para telnet !

Solo para fines de 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)
Cristi Diaconescu
fuente
3

Sí, si usa el cliente putty ssh, verá cualquier salida de línea de comando que producirá su script. Para obtener el código de salida después de que se ejecute el script, escriba:

echo $?
marca
fuente
1

Otra forma de obtener el archivo de registro en su máquina Windows es: - montar Windows m / c en el sistema Unix (dependiendo del sabor de UNIX, esto podría ser posible usando el servidor Samba) - ejecutar el script desde Windows usando cualquier cliente remoto - tener el inicio de sesión de script en el directorio montado

Puede ver la salida en vivo si obtiene el equivalente UNIX de tail para Windows .

James
fuente
0

Una respuesta más:

Guarde todos sus comandos de Linux en el archivo cmdlist.txt y use el siguiente comando.

plink.exe -ssh -pw passwd [email protected] output.txt

passwd == contraseña para iniciar sesión en el dispositivo

uname == 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 output.txt

Asegúrese de mantener plink.exe y cmdlist.txt en el mismo directorio y está apuntando su indicador de DOS al mismo directorio.

manjesh23
fuente