Você tenta conseguir várias coisas aqui:
- Conecte-se a um host sem interação do usuário
- 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.)