Executando um script de shell do servidor remoto na máquina local

5

Imagine um script de shell no servidor remoto como

#!/bin/bash
rm /test.x

Como posso (se possível) executar este script da minha máquina local para excluir o arquivo /test.x em minha máquina local. Obviamente, a solução deve ser algo como ssh authorization, mas sem baixar o arquivo de script do servidor remoto.

Na verdade, eu quero usar o script remoto como um provedor de comandos shell para ser executado na máquina local.

    
por Googlebot 19.01.2013 / 21:46

3 respostas

11

Você precisará fazer o download do conteúdo do script de alguma forma. Você poderia fazer

ssh remote-host cat script.bash | bash

Mas isso teria o mesmo tipo de problema:

cat script.bash | bash

ou seja, que stdin dentro do script seria o próprio script (o que poderia ser um problema se os comandos dentro do script precisassem receber alguma entrada do usuário).

Então, uma alternativa melhor (mas você precisaria de um shell com suporte para substituição de processo como ksh, zsh ou bash) seria:

bash <(ssh remote-host cat script.bash)

Ambas as abordagens baixam o script na medida em que recuperam seu conteúdo, mas não o armazenam localmente. Em vez disso, o conteúdo é enviado para um canal cuja outra extremidade é lida e interpretada por bash .

Você também pode ter o conteúdo do script remoto executado no processo bash atual com:

eval "$(ssh remote-host cat script.bash)"

Mas isso faz o download completo do script (e armazena-o na memória) antes de executá-lo.

A solução óbvia seria:

. <(ssh remote-host cat script.bash)

Mas cuidado que algumas versões do bash têm problemas com isso.

    
por 19.01.2013 / 22:00
2

Monte o sistema de arquivos remoto que contém o script com sshfs . Isso faz do script um arquivo local que você sabe executar.

mkdir /path/to/remote-host
sshfs remote-host:/ /path/to/remote-host
/path/to/remote-host/path/to/script
    
por 21.01.2013 / 01:19
-1

Esta é uma pergunta antiga, mas apareceu como um dos primeiros sucessos no Google, então aqui está uma atualização anos depois.

Isso pode ser feito em uma única linha usando scp:

scp remote-host@/full-path/script.sh . && ./script.sh

O arquivo é copiado do host remoto para o diretório de trabalho atual e executado a partir do diretório de trabalho atual

    
por 11.10.2018 / 23:10