Problema ao executar o script no host após a conexão

2

Eu sou novo no Linux. Por favor ajude. Pesquisei muito abaixo, mas não consegui encontrar uma resposta apropriada:

Eu estou tentando fazer um script que posteriormente programarei como cronjob, para que ele continue rodando no backend e armazene os resultados em um arquivo, digamos test.txt

Os principais pontos do script estão abaixo:

ele se conecta a um host por meio do ssh e, em seguida, executa alguns comandos nesse host e salva os resultados em um arquivo. O script está se conectando ao host com êxito, mas não executando comandos automaticamente no host. Script é como abaixo:

    #!/usr/bin/expect -f

spawn ssh aspen

expect "password: "

send "PASSWORD\r"

expect "$ "

send "/bin/sh /home/target/Script.sh >>test.txt"

expect "$ "

send "exit\r"

Mas quando executo este script, ele não salva a saída completa no test.txt A segunda coisa é que eu quero esse arquivo de saída no meu próprio sistema e não no host. Qualquer ajuda será significativa.

    
por prashant 18.04.2014 / 14:26

1 resposta

1

Você tenta conseguir várias coisas aqui:

  1. Conecte-se a um host sem interação do usuário
  2. Execute algum script e salve sua saída

Para 1:

É melhor gerar um par de chaves ssh com ssh-keygen e armazenar a chave pública em sua máquina host. Gere-o sem usar uma senha e, em seguida, ssh não pedirá por você na conexão. Use

client$ ssh -i <keyfile>

para se conectar ao seu host usando as chaves geradas. Veja também a seção ssh (1) e sshd (8) AUTHORIZED_KEYS FILE FORMAT sobre como adicionar sua chave pública no host a ser reconhecido, que é principalmente:

host$ cat <keyfile>.pub >> ~/.ssh/authorized_keys

(Isso tem que ser feito no host!)

Observação: a chave privada é equivalente a uma senha! Certifique-se de mantê-lo seguro, de modo que apenas o cron job possa usá-lo. Veja a seção sshd (8) AUTHORIZED_KEYS FILE FORMAT, que mostra como você pode restringir o uso do seu par de chaves gerado, de tal forma que ele só possa executar o script!

Para 2:

Você pode executar ssh com um comando shell como um argumento, incluindo redirecionamentos de E / S. Basta executar, por ex. /home/target/Script.sh 2>&1 e salve a saída. O comando completo é assim:

client$ ssh -i <keyfile> user@host '/home/target/Script.sh 2>&1' >>test.txt

test.txt reside em sua própria máquina, o script é executado no host.

Observação: o script direciona sua saída para o padrão. Nenhuma manipulação especial necessária no host (exceto para o redirecionamento '2 > & 1' para também capturar a saída para o erro padrão.)

    
por 18.04.2014 / 14:58