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.