A execução de 'ssh-add -D' de um trabalho cron não funciona

3

Eu configurei um servidor openSSH em uma máquina Ubuntu-Server e configurei-o para usar chave pública / privada (sem senha). Eu quero exigir senha e verificação de chave quando o cliente se conecta ao servidor, então eu criei a chave privada com uma frase secreta. O problema é que a frase secreta é necessária apenas na primeira vez que o cliente tenta se conectar ao servidor, e quaisquer conexões consecutivas (do mesmo cliente) se conectarão automaticamente sem solicitar a senha novamente. Uma exceção a isso é quando o computador do cliente é reinicializado, mas não é isso que eu quero.

Eu tenho controle total na máquina do cliente, então decidi adicionar uma tarefa cron com o comando "ssh-add -D", que remove todas as identidades do agente ssh no computador cliente, o que significa que da próxima vez o cliente tenta se conectar, ele será solicitado a digitar a senha como se fosse a primeira vez. Eu adicionei este comando a um cron job para executar a cada hora (isso me satisfaria, mesmo que isso signifique que nem TODAS as tentativas de conexão exigiriam senha).

Infelizmente, parece que não faz nada quando o trabalho é executado. Eu verifiquei que o trabalho realmente é executado com a adição de mais comandos - enquanto todos os comandos funcionam como esperado, somente o ssh-add parece ter um mau funcionamento.

Eu adicionei o cron job com as seguintes linhas:

user@ubuntu:~$ crontab -u user -e

eu escolhi o vim para editar e adicionei a linha:

* * * * * ssh-add -D

salvo.

O que estou fazendo de errado?

Apenas em uma nota lateral: eu sou muito novo no Linux (usando o Ubuntu), então eu posso não entender alguns conceitos de alto nível .. Eu aprecio se suas respostas forem simples:)

    
por rboy 30.07.2013 / 16:51

2 respostas

2

Normalmente, as variáveis de ambiente são diferentes se um programa é executado a partir do cron, então ssh-add não encontra nenhum ssh-agent.

Em vez disso, chame o seguinte script que tenta todos os agentes e defina $SSH_AUTH_SOCK corretamente:

#!/bin/sh
for agent in /tmp/ssh-*/agent.*; do
    export SSH_AUTH_SOCK=$agent
    if ssh-add -l 2>&1 > /dev/null; then
        # working ssh-agent found
        ssh-add -D # delete all identities
    fi
done
    
por 30.07.2013 / 18:38
0

Talvez seja suficiente adicionar

AddKeysToAgent yes

para o .ssh/config ?

do cliente     
por 30.10.2016 / 21:40