Abaixo está o script que estou tentando executar, que é executado sem nenhum problema
for i in `seq 200 2100`
do
usr=(`ssh -t -t -o ConnectTimeout=60 machine$1 finger | tail -1 | awk '{print$1}'`)
echo $usr
done
Mas uma vez que eu o adiciono ao crontab, ele não me dá o usuário.
22 12 * * * sh /home/subrahmanyam/Scripts/who.sh
Por favor, dê seus pensamentos ...
pode ser que o cron demon esteja em execução, então precisamos incluir alguns binários ...?
shell
ssh
cron
authentication
Gilles 'SO- parar de ser mau'
fonte
fonte
Respostas:
Você pode fazer conexões ssh dentro de uma sessão cron. O que você precisa é configurar uma autenticação de chave pública para ter acesso sem senha. Para que isso funcione, você precisa ter
PubkeyAuthentication yes
em cada servidor remotosshd_config
.Você pode criar um par de chaves públicas / privadas com ou sem uma senha. Se você usar uma senha (recomentada), também precisará iniciar o ssh-agent. Sem uma senha, você só precisa adicionar o parâmetro
-i your_identity_file
àssh
linha de comando.ssh
usará$HOME/.ssh/id_rsa
como padrão.Eu repliquei seu exemplo usando um par de chaves com uma senha. Aqui está como eu fiz isso.
1) Criou o par de chaves com a senha. Salva a chave privada como
~/.ssh/id_rsa_test
, que deve ter as permissões corretas por padrão. Podemos inserir uma senha vazia por não usar uma.2) Enviou a chave pública para os servidores, fez o mesmo para todos eles. Lembre-se de que eles precisam ter
PubkeyAuthentication
ativado.3) Execute o ssh-agent como serviço com
-s
. Isso não o matará se você sair. Sua saída é um script de shell válido, configurando o ambiente para que o cliente ssh saiba como se conectar a ele. Salvamos isso em um arquivo (apenas a primeira linha é realmente necessária).4) Carregou o acima em nosso ambiente atual para que possamos
ssh-add
adicionar nossa chave privadassh-agent
. a senha de cima.5) Verificado, é adicionado.
6) O script que usei, ligeiramente modificado que o seu. Observe que eu não coloquei o comando ssh entre parênteses e não usei backticks
$()
, o que é uma alternativa melhor para a substituição de comandos (isso ébash
compatível, você não mencionou qual shell está usando). Eu usei exatamente o mesmo comando ssh que o seu.7) Meu crontab (observe que meu
sh
é realmentebash
)8) A saída
O único problema com o uso de uma senha é que você precisa digitá-la manualmente pelo menos uma vez. Portanto, o acima não funcionará automaticamente após uma reinicialização.
fonte
Quem digita a senha? O trabalho cron não pode chegar ao seu ssh-agent, portanto a chave pública não funcionará.
Você precisa fornecer
ssh
um arquivo de chave explicitamente (consulte a-i
opção), pois ele não pode consultar um agente; e essa chave deve ter uma senha vazia.fonte
/dev/tty
para ler a senha em vez destdin
; isso não vai funcionar do cron.known_hosts
? Mas sim, você precisa ficar atento às permissões - o arquivo da chave privada deve estar no modo 0600 ou 0400, de sua propriedade. Se você precisar de algum outro usuário para poder usá-lo também, examinará as ACLs POSIX ou similares.kinit
dentro do cron job. Dito isto, os keytabs também exigem o mesmo cuidado nas permissões; masssh
pelo menos não vai reclamar deles.Em vez de armazenar um arquivo temporário como o forcefsck, prefiro usar
find
para procurar no agente ativo.No tópico de um script que precisa de
ssh-agent
, eu uso:Ele procura pelo
ssh-agent
soquete e retorna o primeiro. Ele é restrito apenas ao usuário atual; portanto, você não tentará acidentalmente usar outros usuários e obterá um erro de permissão negada. Você também precisa estar logado com um ativossh-agent
. (O Ubuntu inicia um agente quando a GUI inicia).Se você colocar isso em outro script, precisará chamá-lo com
source
ou.
porque ele precisa definir aSSH_AUTH_SOCK
variável.fonte
Use ssh-cron para configurar conexões SSH agendadas para proteger servidores sem expor suas chaves SSH, mas usando o agente SSH.
fonte
Você pode executar seu script ou comando no crontab como:
ou
fonte