Executa comandos em servidores remotos com 2 scripts

1

Atualmente, estou usando SSHPass em um script para se conectar a um servidor remoto:

sshpass -p PASSWORD ssh -o StrictHostKeyChecking=no [email protected]

e para executar qualquer comando remotamente, eu uso:

sshpass -p PASSWORD ssh -o StrictHostKeyChecking=no [email protected] "COMMAND"

Estou planejando separar a etapa de conexão em um script ( conn.sh ) e os comandos em outro ( cmd.sh ).

Eu tentei desta forma:

cmd.sh:

#!/bin/bash
ls -ltr

conn.sh:

#!/bin/bash    
sshpass -p PASSWORD ssh -o StrictHostKeyChecking=no [email protected] ""

E a execução depois de fornecer os dois scripts "chmod a + x":

./conn.sh cmd.sh

Mas isso me deu um erro:

cmd.sh: command not found

Eu até tentei substituir pelo caminho para cmd.sh , mas isso me deu este erro:

sh: /home/myhome/cmd.sh: No such file or directory
    
por MohammedSimba 16.02.2016 / 15:09

1 resposta

1

A razão é que quando você executa algo como

ssh user@remote command

O command não é executado apenas na máquina remota, ele também é pesquisado na máquina remota. Portanto, quando você executa ./conn.sh cmd.sh , está se conectando ao controle remoto e, em seguida, está tentando executar um script chamado cmd.sh no remoto . Como não existe tal script (ele é armazenado em sua máquina local), a execução falha e você vê esse erro.

Você pode fazer o que descreve ao alterar seu conn.sh para:

#!/bin/bash
sshpass -p PASSWORD ssh -o StrictHostKeyChecking=no [email protected] \
 bash -s < ""

E, em seguida, execute

./conn.sh /local/path/to/cmd.sh

Isso abrirá um shell bash na máquina remota. O -s diz ao bash para ler os comandos da entrada padrão e o < "" fornece o primeiro argumento dado a conn.sh como a entrada para o bash shell.

Tem certeza de que precisa fazer isso? O que você descreve é quase certamente um problema XY . A solução simples é criar o cmd.sh no servidor remoto. Então você pode fazer

./conn.sh /remote/path/to/cmd.sh
    
por terdon 16.02.2016 / 18:06