Pode e como você executa um comando em um servidor remoto através de um script bash?

1

Eu me sinto um pouco bobo perguntando o que parece ser uma pergunta capaz do Google, mas estou tentando rotear uma tarefa repetitiva de (1) ssh'ing em um servidor remoto (2) executando o script.sh no meu diretório inicial e (3) copiar / colar a saída.

Seria ótimo se eu pudesse escrever um roteiro para fazer esse trabalho para mim. Escrevi alguns scripts bash que scp arquivos dessas máquinas, mas nunca um que executou scripts nessas máquinas.

É possível ter um script na máquina 1 e efetuar login e executar script.sh na máquina 2 através da máquina n , descarregando a saída na máquina 1? Se sim, como?

    
por editor 19.01.2011 / 00:17

3 respostas

6

É fácil:

comando ssh user @ host

comando = elabore com tubulação e como necessário.

    
por 19.01.2011 / 00:21
4

Semelhante à resposta de Jeffrey, mas com um loop de uma linha.

for i in "server1 server2 otherserver"; do ( ssh username@$i yourcommand & ); done

Isso permite gerar cada tarefa em segundo plano, para que todo o comando demore apenas um momento em sua estação de trabalho. Se você estiver usando autenticação baseada em senha, será necessário:

  • Implementar login sem senha (preferido!)
  • Livre-se do e comercial (&) e insira a senha sempre
  • Especifique a senha na linha de comando (incluída apenas para a integralidade - por favor, não!)
por 19.01.2011 / 00:31
1

Então eu acho que a verdadeira questão aqui é como você pega o script da máquina 1 para a máquina 2 para que você possa executá-lo, certo? Existem várias maneiras de fazer isso. Você poderia usar um script na máquina 1 que primeiro usa scp para transferir o arquivo de script script para a máquina 2 e, em seguida, executa ssh machine2 script .

Isso funciona bem se você tiver a chave pública auth configurada de forma consistente para que você não seja solicitado a fornecer senhas. Se você precisar digitar sua senha sempre que fizer login na máquina2, será necessário examinar as abordagens usando expect , conforme detalhado em esta postagem stackoverflow . Você deve ser capaz de usar o autoexpect para escrever rapidamente o script de expectativa necessário.

Outras abordagens incluem a montagem nfs de um diretório compartilhado em todos os hosts. Nesse cenário, você copia um scriptfile para esse diretório na máquina1 e, em seguida, fica disponível na máquina2 e em todas as outras máquinas conectadas à mesma montagem nfs.

Por fim, este é um problema que ferramentas de gerenciamento de configuração como cfengine e fantoche resolva com algum tipo de mecanismo de entrega de arquivos. Nessa configuração, as máquinas clientes se conectam a um servidor central e baixam o arquivo de script antes de executá-lo.

    
por 19.01.2011 / 00:30

Tags