
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 -f
opçã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 sshpass
onde 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 ssh
sem 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
.....