Como fazer ssh e executar um script remoto dentro de um script de shell local?

Como fazer ssh e executar um script remoto dentro de um script de shell local?

Eu tenho um script de shell que iniciará uma série de trabalhos em um servidor remoto. Posso fazer ssh neste servidor (mas requer uma senha!) E executar os scripts manualmente, mas há certas etapas que também são executadas localmente, então gostaria de evitar fazer ssh e executar coisas manualmente. Existe uma maneira de fazer ssh/login automaticamente e, em seguida, iniciar o comando em um script de shell local maior?

Responder1

Eu sugeriria que, se você tiver muitos comandos para executar no servidor remoto, crie-os como um script de shell que você carrega uma vez e depois executa uma vez pelo comando ssh.

Certifique-se de ter permissões de execução no script e de que ele não dependa de nenhuma informação obtida em sua sessão normal do shell, como variáveis ​​ou caminho definido por um script de login interativo, por exemplo: .bashrc, pois eles não são executados ao executar um comando por meio de um comando ssh remoto.

Lembre-se também de verificar se o "retorno" do script está marcado para garantir que o comando seja concluído conforme o esperado.

Responder2

Para executar um script/comando no host remoto, execute

ssh [<USER>@]<REMOTE_HOST> [-f] <REMOTE_COMMAND>

Adicione a -fopção se quiser que o ssh vá imediatamente para segundo plano em vez de esperar que o comando termine.

No que diz respeito ao login, a identificação automatizada por senha é, em geral, uma má ideia. Se for realmente impossível para sua configuração, gere um par de chaves privada/pública (com a chave privada armazenada na máquina local e a chave pública armazenada na máquina remota) e use-a para autenticação - conforme sugerido no comentário acima - , você terá que reverter para uma ferramenta como sshpassonde você pode iniciar sua sessão/comando remoto via:

sshpass -p <YOURPASSWORD> ssh [<USER>@]<REMOTE_HOST> [-f] [<REMOTE_COMMAND]

Responder3

Você pode usar a autenticação de chave pública/privada para estabelecer a sua sshsem a necessidade de uma senha. Para fazer isso você só precisa gerar o par de chaves ( ssh-keygen) e adicionar sua chave pública ao arquivo ~/.ssh/authorithed_keys do usuário do servidor.

#!/bin/bash
ssh user@server RemoteCommand #man ssh for more info
local command1
local command2
.....

informação relacionada