Boa tarde,
Veja, existe um problema logico por traz disso.
Vamos chamar a maquina onde roda o script de maquina local e a maquina onde realiza a conexão de servidor.
Tendo isso em mente, o script funciona da seguinte forma:
1 - O script está executando na maquina local e, em seu código, num determinado momento, conecta no servidor.
2 - Todo script funciona processando linha a linha, após a linha que abre uma conexão com o servidor, o script fica "Em pausa".
3 - As linhas subsequentes do script serão executadas após a conexão ser encerrada.
Consequência, todos as linhas que vem depois da conexão ssh com o servidor, serão executadas após a conexão ser encerrada.
Em resumo, os comandos que gostaria que fosse executado no servidor serão executados localmente, visto que quando a linha é executada, não existe mais conexão.
Vê o erro de lógica? Se já está conectado a outro micro, como pode o script em seu micro executar suas instruções?.
É como tentar dar ordem aos caseiros de sua casa de praia sem estar lá, vc está em sua casa na cidade.
Apenas quando voltar a casa de praia as instruções serão dadas.
Existe duas formas de resolver isso:
Forma 1 - Preparar as instruções no destino (um script) e realizar uma chamada remota para execução desse script.
Supondo que queira que arquivos do servidor sejam transferidos para outra maquina, ou seja, um backup.
Nesse caso, deixe o script de backup no servidor e o chame da sua maquina local:
Ex: sshpass -p senha ssh IP_Servidor "nohup /caminho_do_script &"
Dessa forma, será aberto uma conexão ssh do seu micro para o servidor e, no servidor, vc chamou o backup.
ps1: O nohup é para que o comando continue sendo executado após a conexão ser fechada.
ps2: o & serve para que o comando seja processado em segundo plano.
O comando será processado rapidamente e o terminal ficará disponivel para uso, mas o backup estará sendo executado no servidor.
ssh IP "instrução" -> isso executa uma instrução remota mas não deixa a conexão aberta, ou seja, vc não sai do seu terminal.
ex: ssh IP "cat /etc/passwd" -> em seu terminal, será mostrado o caminho do arquivo.
Forma 2 - Vamos supor que deseja realizar um backup do servidor para a maquina local executando o script a partir da maquina local:
dentro do script da maquina local:
sshpass -p senha_servidor ssh IP_SERVIDOR "sshpass -p senha_maquinalocal scp -rf /diretorio_servidor/arquivos_servidor IP_maquinalocal:/diretorio_destino_maquinalocal"
Explicando: Conexão aberta com o servidor onde foi executada a instrução que o ordena copiar dados para o micro local.
Para isso funcionar, a conexão do servidor para a maquina local não pode pedir senha, pois se pedir, não tem como ser informada e tera erro de autenticação.
Entendeu a lógica? você não pode acessar o servidor e executar comandos dentro dele por meio de script.
Terá de enviar o comando diretamente com a conexão, mas sem permanecer conectado, dessa forma o script irá executar as linhas subsequentes.
Ex1: de o comando sshpass -p senha ssh IP_SERVIDOR "ls /"
E como resultado, será mostrado o / do servidor, mas não estará conectado nele, continuará em sua maquina.
Supondo que, do micro local queira fazer um backup do servidor 1 para o servidor 2.
Ex2: sshpass -p senha_servidor_1 ssh ip_servidor "rsync --delete -vgpruzl /Diretorio_servidor/* -e sshpass -p senha_servidor_2 ssh ip_servidor_2:/diretorio_destino/"
ps1:rsync: comando utilizado para sincronizar o conteudo entre diretorios.
ps2: parametro --delete: Faz com que, se o arquivo for deletado no servidor 1, seja deletado durante o sincronismo no servidor 2. (evita o acumulo de dados, mas não preserva dados excluidos, vc escolhe usar ou não.)
se quiser saber mais sobre o rsync, pesquise-o.
Obviamente, se esta usando o script sshpass, tende configurar o ssh para suprimir a pergunta que o ssh faz, se quer ou não conectar em outro micro.