Tarefa Cron com o ssh não funcionando após a inicialização

1

Eu tenho o seguinte script coletando dados sobre usuários registrados atualmente.

#!/bin/bash
# Collecting users login statistics

CURRENT_ALL_USERS="path_to_log_file"
ADMIN="path_to_admin_dir"
STATIONS="$ADMIN/stations_list"
ALL_USERS_IN_STATIONS=0

eval 'keychain --eval ~/.ssh/id_rsa'

for STATION in 'cat $STATIONS'; do
    TEMP_VAR='ssh user@$STATION who | cut -d " " -f1 | sort -u | wc -l'
    USERS_IN_STATION=$TEMP_VAR
    let ALL_USERS_IN_STATIONS="$ALL_USERS_IN_STATIONS+$USERS_IN_STATION"
done

echo $ALL_USERS_IN_STATIONS > $CURRENT_ALL_USERS

Executar periodicamente com o cronjob:

 * * * * * /path_to_script/script.sh

Quando o servidor reinicializa o script não pode ssh para estações remotas e eu preciso executar manualmente o script pela primeira vez.

O que posso fazer para que o script funcione após a reinicialização sem executá-lo manualmente pela primeira vez?

    
por Eyal Levin 23.01.2011 / 10:43

2 respostas

1

Quando você executa manualmente o script pela primeira vez, o que ele faz de diferente? Experimente a primeira execução manual com bash -x script.sh e veja se há algo útil nela.

Qual diretório é $CURRENT_ALL_USERS escrito para?

Esse é provavelmente o seu problema, a partir do keychain (1) página de manual:

When keychain is run, it checks for a running ssh-agent, otherwise it starts one. It saves the ssh-agent environment variables to ~/.keychain/${ HOSTNAME }-sh, so that subsequent logins and non-interactive shells such as cron jobs can source the file and make passwordless ssh connections. In addition, when keychain runs, it verifies that the key files specified on the command-line are known to ssh-agent, otherwise it loads them, prompting you for a password if necessary.

O

keychain faz o processamento especial na primeira vez em que é executado, em particular, ele inicia o ssh-agent. Portanto, o ssh-agent deve estar com falha quando executado a partir do cron, mas funcionando quando o script é executado manualmente.

Sugiro que você considere a configuração de um usuário especial para executar essa verificação e / ou um conjunto especial de chaves privadas / públicas. Não coloque uma senha nesse par de chaves. Então você pode se livrar de todo o chaveiro e usar essas chaves diretamente no script sem ter que se preocupar em carregar chaves com chaves, ssh-agent, ssh-add, etc.

Além disso, como um outro lado aleatório, um refinamento legal desse script seria usar uma matriz bash para coletar todas as informações do usuário que fizeram o login, em vez de anexar a uma string como você está fazendo agora.

    
por 23.01.2011 / 11:12
0

export HOME = / root

Você está provavelmente perdendo o HOME que é usado pelo ssh e referido por ~

eval 'keychain --eval ~/.ssh/id_rsa'
    
por 23.01.2011 / 10:54

Tags