
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'