![Execute um script remoto em um arquivo local via SSH](https://rvso.com/image/1552761/Execute%20um%20script%20remoto%20em%20um%20arquivo%20local%20via%20SSH.png)
Eu tenho uma máquina remota com um binário Linux que aceita vários argumentos e um arquivo de texto. A saída de um programa é gravada em stdout e sempre gravo em um arquivo de texto. Acabei copiando um arquivo de dados para a máquina remota, executando o comando naquele arquivo e copiando o arquivo resultante de volta. Isso é demorado e sujeito a erros.
É possível com o SSH e as ferramentas padrão do Linux executar um binário remoto via SSH em um arquivo local sem copiá-lo primeiro para a máquina remota?
Idealmente, eu gostaria de ter um script bash na minha máquina local. Eu especifico o arquivo de dados como um argumento e ele executa toda a conexão SSH, envio de dados, etc. e gera o resultado no stdout localmente.
Minha máquina local é Mac OS X e a remota é Linux. Não, não consigo fazer o binário do Linux funcionar no Mac OS X.
Atualização: a ferramenta na máquina remotapodeleia de stdin.
Responder1
Se a ferramenta puder ler stdinem vez deum arquivo de texto e fornece sua saída via stdout, esta bash
sintaxe deve executá-lo remotamente sem a necessidade de copiar nenhum arquivo:
< "/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 leem stdin enquanto não há nenhum arquivo de entrada especificado. Não sei nada sobre sua ferramenta, então esta é uma abordagem genérica que talvez você precise 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: remoto cat
concatena local e remoto /etc/hosts
:
< "/etc/hosts" ssh user@remote 'cat - /etc/hosts'