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