Configuration du délai d'expiration par défaut pour l'agent SSH

10

J'utilise ssh-addpour ajouter mes clés SSH à l'agent SSH. Par défaut, il les ajoute indéfiniment. Il existe une option de ligne de commande pour spécifier un délai d'expiration, mais existe-t-il une option de fichier de configuration qui spécifiera le délai d'expiration par défaut?

Ce que je veux, c'est pouvoir exécuter ssh-addsans aucun paramètre de ligne de commande et le faire par défaut à une durée donnée pour un délai d'attente (comme si j'avais appelé ssh-add -t 1h).

Naftuli Kay
la source

Réponses:

7

AFAIK, il n'y a pas de configuration dans sshd_configou ssh_configpour spécifier le délai d'expiration ssh-agent. Du opensshcode source, fichier ssh-agent.c:

/* removes expired keys and returns number of seconds until the next expiry */  
static time_t                                                                   
reaper(void)                                                                    
{                                                                               
    time_t deadline = 0, now = monotime();                                      
    Identity *id, *nxt;                                                         
    int version;                                                                
    Idtab *tab;                                                                 

    for (version = 1; version < 3; version++) {                                 
        tab = idtab_lookup(version);                                            
        for (id = TAILQ_FIRST(&tab->idlist); id; id = nxt) {                    
            nxt = TAILQ_NEXT(id, next);                                         
            if (id->death == 0)                                                 
                continue;                                                       
            if (now >= id->death) {                                             
                debug("expiring key '%s'", id->comment);                        
                TAILQ_REMOVE(&tab->idlist, id, next);                           
                free_identity(id);                                              
                tab->nentries--;                                                
            } else                                                              
                deadline = (deadline == 0) ? id->death :                        
                    MIN(deadline, id->death);                                   
        }                                                                       
    }                                                                           
    if (deadline == 0 || deadline <= now)                                       
        return 0;                                                               
    else                                                                        
        return (deadline - now);                                                
}

Et en process_add_identityfonction:

process_add_identity(SocketEntry *e, int version)                               
{
.... 
if (lifetime && !death)                                                     
        death = monotime() + lifetime;
....
}

lifetime est une variable globale et ne change la valeur que lors de l'analyse de l'argument:

/* Default lifetime in seconds (0 == forever) */                                
static long lifetime = 0;

int                                                                             
main(int ac, char **av)                                                         
{
.... 
    case 't':                                                               
        if ((lifetime = convtime(optarg)) == -1) {                          
            fprintf(stderr, "Invalid lifetime\n");                          
            usage();                                                        
        }
....
}

Si vous utilisez Ubuntu, vous pouvez définir des options par défaut pour ssh-agentdans /etc/X11/Xsession.d/90x11-common_ssh-agent:

STARTSSH=
SSHAGENT=/usr/bin/ssh-agent
SSHAGENTARGS="-t 1h"

if has_option use-ssh-agent; then
  if [ -x "$SSHAGENT" ] && [ -z "$SSH_AUTH_SOCK" ] \
     && [ -z "$SSH2_AUTH_SOCK" ]; then
    STARTSSH=yes
    if [ -f /usr/bin/ssh-add1 ] && cmp -s $SSHAGENT /usr/bin/ssh-agent2; then
      # use ssh-agent2's ssh-agent1 compatibility mode
      SSHAGENTARGS=-1
    fi
  fi
fi

if [ -n "$STARTSSH" ]; then
  STARTUP="$SSHAGENT $SSHAGENTARGS ${TMPDIR:+env TMPDIR=$TMPDIR} $STARTUP"
fi
cuonglm
la source
Chose amusante. J'ai essayé SSHAGENTARGS="-s -t 3600"et ça s'arrête sans erreur, écran vide. Mais juste une curiosité, car votre réponse est correcte et ne s'arrête pas ou quoi que ce soit.
Dr Beco
15

Si vous appelez ssh-addsur la ligne de commande, créez un alias de shell. Mettez la ligne suivante dans votre ~/.bashrc(si vous utilisez bash) ou ~/.zshrc(si vous utilisez zsh) ou tout autre fichier d'initialisation de shell applicable:

alias ssh-add='ssh-add -t 1h'

Si vous souhaitez ajouter une clé non expirante, utilisez \ssh-add /path/to/keyou ssh-add -t 0 /path/to/key.

Si ssh-addest appelé à partir d'un autre programme, voyez s'ils peuvent être configurés pour prendre des arguments. A défaut, créez un fichier très tôt sur votre $PATH( ~/binest un choix courant de répertoire, assurez-vous qu'il se trouve au début de votre PATHet créez-le s'il n'existe pas) appelé ssh-addcontenant

#!/bin/sh
exec /usr/bin/ssh-add -t 1h "$@"

(Remplacez /usr/bin/ssh-addpar le chemin vers le ssh-addbinaire si nécessaire.)

Gilles 'SO- arrête d'être méchant'
la source
Un alias de shell serait probablement la bonne solution.
Naftuli Kay
10

Le délai d'expiration par défaut est indéfiniment. Il est cependant possible de définir le délai d' expiration par défaut pour un agent spécifique via l' -toption de ssh-agent.

de l'homme ssh-agent:

-t life
        Set a default value for the maximum lifetime of identities added
        to the agent.  The lifetime may be specified in seconds or in a
        time format specified in sshd_config(5).  A lifetime specified
        for an identity with ssh-add(1) overrides this value.  Without
        this option the default maximum lifetime is forever.
Ouki
la source
1
Existe-t-il un moyen de configurer de ssh-addsorte que la valeur par défaut soit autre chose que pour toujours? Si je viens de courir ssh-addsans aucun paramètre, j'aimerais qu'il expire après une heure.
Naftuli Kay
Comment lancer le ssh-agent?
Ouki