Configurar el tiempo de espera predeterminado para el agente SSH

10

Utilizo ssh-addpara agregar mis claves SSH al agente SSH. Por defecto, los agrega indefinidamente. Hay una opción de línea de comandos para especificar un tiempo de espera, pero ¿hay una opción de archivo de configuración que especifique el tiempo de espera predeterminado?

Lo que quiero es poder ejecutar ssh-addsin ningún parámetro de línea de comandos y tenerlo predeterminado a una cantidad de tiempo determinada para un tiempo de espera (como si hubiera llamado ssh-add -t 1h).

Naftuli Kay
fuente

Respuestas:

7

AFAIK, no hay configuración en sshd_configo ssh_configpara especificar el tiempo de espera ssh-agent. Desde el opensshcódigo fuente, archivo 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);                                                
}

Y en process_add_identityfunción:

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

lifetime es una variable global y solo cambia el valor al analizar el argumento:

/* 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 usa Ubuntu, puede establecer opciones predeterminadas para ssh-agenten /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
fuente
Cosa graciosa. Lo intenté SSHAGENTARGS="-s -t 3600"y se detiene sin error, pantalla en blanco. Pero solo una curiosidad, porque su respuesta es correcta y no se detiene ni nada.
Dr Beco
15

Si está llamando ssh-adda la línea de comando, cree un alias de shell. Ponga la siguiente línea en su ~/.bashrc(si usa bash) o ~/.zshrc(si usa zsh) u otro archivo de inicialización de shell aplicable:

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

Si desea agregar una clave que no caduca, use \ssh-add /path/to/keyo ssh-add -t 0 /path/to/key.

Si ssh-addse llama desde otro programa, vea si pueden configurarse para tomar argumentos. De lo contrario, cree un archivo temprano en su $PATH( ~/bines una opción común de directorio, asegúrese de que esté al principio de su PATHy créelo si no existe) llamado ssh-addcontener

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

(Reemplace /usr/bin/ssh-addpor la ruta al ssh-addbinario según sea necesario).

Gilles 'SO- deja de ser malvado'
fuente
Un alias de shell probablemente sería el curso de acción correcto.
Naftuli Kay
10

El tiempo de espera predeterminado es para siempre. Sin embargo, es posible establecer el tiempo de espera predeterminado para un agente específico mediante la -topción de ssh-agent.

del hombre 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
fuente
1
¿Hay alguna forma de configurar ssh-addpara que el valor predeterminado sea algo distinto de siempre? Si solo ejecuto ssh-addsin ningún parámetro, me gustaría que se agote después de una hora.
Naftuli Kay
¿Cómo lanzar el ssh-agent?
Ouki