Como executar scripts locais (não shell) em um host remoto via SSH?

5

Como posso fazer cat someFile | ssh someHost funcionar quando someFile não é um script bash? Eu quero executar remotamente um script perl , mas eu recebo um monte de erros de sintaxe do bash quando eu tento o gato | comando ssh.

    
por Sol 22.03.2017 / 17:44

3 respostas

10

Se você quiser enviar o script Perl através da conexão SSH, você terá para executar o interpretador Perl no final remoto. Vai ler o script do stdin:

ssh remotehost perl < somescript.pl

No caso do Perl, ele deve até ler as opções de linha de comando (exceto -T ) da linha de hashbang da entrada.

Se você quiser fornecer argumentos de linha de comando ao interpretador Perl, basta adicioná-los à linha de comando depois de perl . Se você quiser dar argumentos para o script , você precisará explicitamente dizer ao interpretador para ler o script de stdin (caso contrário, o primeiro argumento será considerado como um nome de arquivo para procurar). / p>

Então, aqui -l vai para o interpretador e foo e bar para o script:

echo 'print "> $_"  foreach @ARGV' | ssh remotehost perl -l - foo bar 

Observe que fazer apenas ssh somehost < script.sh conta com o shell de login remoto sendo compatível com o script. (por exemplo, um script Bash não funcionará se o shell remoto for outra coisa).

    
por 22.03.2017 / 17:56
3

ssh someHost executará seu shell padrão, que por sua vez executará os comandos que lê a partir da entrada padrão. Como você está enviando o conteúdo de someFile para a entrada padrão, ele tenta logicamente executar o conteúdo de someFile.

Você não nos diz o que o someFile deve conter. Supondo que seu conteúdo deva ser alimentado em seu script perl, o que você deve fazer é:

cat someFile | ssh someHost your_perl_script

Ou melhor:

ssh someHost your_perl_script < someFile
    
por 22.03.2017 / 17:51
0

em para = >

Escreva a saída local no arquivo remoto: Você acabou de instalar o apache no seu $ myhost. Agora você quer testá-lo.

Você pode fazer o eco da string de teste no arquivo, só que desta vez o arquivo está na raiz do htdocs remoto:

echo "It works" | ssh [email protected] 'cat >> /usr/local/apache/htdocs/it_works.html'

Abra o arquivo remoto com menos ou gato: Com gato:

ssh [email protected] "cat /usr/local/apache/htdocs/it_works.html"

Com menos:

ssh [email protected] "less /usr/local/apache/htdocs/it_works.html"

Arquivos remotos do Grep:

com tubo:

ssh [email protected] "cat /usr/local/apache/htdocs/it_works.html" |  grep "works"

Apenas grep remoto:

ssh [email protected] "grep works /usr/local/apache/htdocs/it_works.html"

Assistindo logs remotos com a cauda:

Dessa forma, você pode assistir ao acesso ao servidor do Apache em tempo real:

 ssh [email protected] "tail -f /etc/httpd/logfiles/access_log"

A fonte para esta resposta é aqui .

Espero que tenha ajudado você.

    
por 22.03.2017 / 17:56

Tags