Como se configura o cron para analisar ~/.ssh/config
para obter os endereços IP e outras opções (como o IdentityFile) para o SSH? Obviamente, adicionar source /home/user/.ssh/config
não ajuda.
Eu não quero adicionar as opções no script executado a partir do cron, pois ele chama mais de vinte servidores que possuem opções variadas. Eu mantenho o arquivo ~/.ssh/config
atualizado quando endereços IP ou chaves PEM mudam, e eu não quero duplicar esse esforço para outro arquivo para manter.
O Cron não herda o ambiente do usuário para configurá-lo. Assim, para um determinado script:
$ cat .ssh/config
Host alpha
Hostname 1.2.3.4
User dotan
IdentityFile ~/.ssh/Dotan.pem
IdentitiesOnly yes
$ cat script.sh
#!/bin/bash
echo "Alpha"
ssh alpha dmesg
Isso funciona:
$ ./script.sh > output.log
$ cat output.log
Alpha
[73542728.181371] type=1400 audit(1397118713.764:13): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=710 comm="apparmor_parser"
No entanto, este cronjob não funciona :
0 0 * * * /home/dotan/script.sh > /home/dotan/output.log
A saída é:
Alpha
Isso prova que o script foi executado, mas o SSH não conseguiu se conectar.
EDITAR:
Acabei de descobrir que o ssh tem a opção -F /home/dotan/.ssh/config
para especificar um arquivo de configuração, mas isso não resolveu o problema.