Executar remotamente o script no Unix, obter saída localmente?


45

Preciso executar um script (Tcl, ou o que seja) em uma máquina Unix remota, a partir de um shell de comando do Windows (local) e quero que o stdout / stderr do script apareça na CLI do Windows. O código de saída também seria útil.

Isso é possível usando ssh (massa)? Ou por qualquer outro meio?

Obrigado!

Respostas:


44

Este é o padrão para SSH. Se você deseja redirecionar a saída remotamente, coloque o símbolo de redirecionamento (normalmente ">") dentro das aspas do comando.

Por exemplo:

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

Para salvar a saída localmente no host do Windows,

ssh remote_host "ls" > .\file_on_local_host.txt

Para combinar o stderr remotamente e salvá-lo e stdout localmente,

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

É possível fazer isso com o putty.exe? Ou seja, funciona como um programa CLI "normal" em oposição ao padrão, que é emular um terminal.
— Cristi Diaconescu

Eu inseri um sistema Windows 2003 e executei a linha de comando, sim. O host tinha a versão da HP do servidor SSH instalada para oferecer suporte às ferramentas de administração do sistema. Se você tiver apenas um cliente SSH, tudo estará em execução no sistema remoto.
— kmarsh

1
Isso funciona também para uma máquina local não Windows.
— shiri

Exceto pelo caminho da barra invertida, sim.
— Kmarsh #

20

O que eu estava procurando é o chute lateral da massa de vidraceiro, plink.exe . Ao contrário do putty, que atua como um emulador de terminal, plinkatua como um programa CLI normal (não interativo).

Com ele, eu poderia fazer isso cmd.exee obter a saída do comando remoto salva localmente.

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

O melhor de tudo é que funciona tanto para ssh quanto para telnet !

Apenas para fins de referência, estas são as opções disponíveis:

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)

3

Sim, se você usar o cliente putty ssh, verá qualquer saída de linha de comando que seu script produzirá. Para obter o código de saída após a execução do script, digite:

echo $?

1

Outra maneira de obter o arquivo de log na sua máquina Windows é: - montar o Windows m / c no sistema Unix (dependendo do tipo de UNIX, isso pode ser possível usando o servidor Samba) - executar o script no Windows usando qualquer cliente remoto - ter o log de script no diretório montado

Você pode ver a saída ao vivo se obtiver o equivalente UNIX da cauda para Windows .


0

Mais uma resposta:

Salve todos os seus comandos linux no arquivo cmdlist.txt e use o comando abaixo.

plink.exe -ssh -pw passwd uname@1.2.3.4 output.txt

passwd == senha para o login dispositivo

uname == nome de usuário para o login do dispositivo

1.2.3.4 == endereço IP do dispositivo

Após a execução deste comando, todos os seus comandos cmdlist.txt serão executados no dispositivo remoto e a saída será salva no arquivo chamado output.txt

Certifique-se de manter o plink.exe e o cmdlist.txt no mesmo diretório e você está apontando o prompt dos para o mesmo diretório.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.