Execute um script remoto em um arquivo local via SSH

3

Eu tenho uma máquina remota com um binário do Linux que aceita vários argumentos e um arquivo de texto. A saída de um programa é gravada em stdout que eu sempre escrevo em um arquivo de texto. Eu encontrei-me copiando um arquivo de dados para a máquina remota, executando o comando no arquivo e copiando o arquivo resultante de volta. Isso é demorado e propenso a erros.

É possível que o SSH e as ferramentas padrão do Linux executem um binário remoto via SSH em um arquivo local sem copiá-lo primeiro para a máquina remota?

Idealmente, gostaria de ter um script bash na minha máquina local. Especifico o arquivo de dados como um argumento e ele executa toda a conexão SSH, o envio de dados, etc. e gera o resultado no stdout localmente.

Minha máquina local é o Mac OS X e o controle remoto é o Linux. Não, não consigo que o binário do Linux funcione no Mac OS X.

Atualização: A ferramenta na máquina remota pode ler a partir de stdin.

    
por Vladislavs Dovgalecs 05.02.2018 / 18:23

1 resposta

1

Se a ferramenta puder ler stdin em vez de um arquivo de texto e fornecer sua saída via stdout, essa sintaxe bash deverá executá-lo remotamente, sem a necessidade de copiar arquivos:

< "/local_path/to/input_file" ssh user@remote 'the_tool -some_option1 -option2'

Nota: alguns comandos precisam de opção ou argumento especial (por exemplo, - ) para ler stdin; alguns lêem stdin enquanto não há nenhum arquivo de entrada especificado. Eu não sei nada sobre sua ferramenta, então esta é uma abordagem genérica que você pode precisar ajustar.

O redirecionamento da saída para um arquivo local com > ou (local) tee também funcionará:

< "/local_path/to/input_file" ssh user@remote 'the_tool -some_option1 -option2' | tee "/local_path/to/output_file"

Exemplo: cat remota concatena% e local e remota /etc/hosts :

< "/etc/hosts" ssh user@remote 'cat - /etc/hosts'
    
por 05.02.2018 / 21:51