Configurazione del timeout predefinito per l'agente SSH


10

Uso ssh-addper aggiungere le mie chiavi SSH all'agente SSH. Per impostazione predefinita, li aggiunge indefinitamente. Esiste un'opzione della riga di comando per specificare un timeout, ma esiste un'opzione del file di configurazione che specifica il timeout predefinito?

Quello che voglio è essere in grado di funzionare ssh-addsenza alcun parametro della riga di comando e impostarlo come predefinito su un determinato periodo di tempo per un timeout (come se avessi chiamato ssh-add -t 1h).

Risposte:


7

AFAIK, non esiste alcuna configurazione sshd_configo ssh_configper specificare il timeout per ssh-agent. Dal opensshcodice sorgente, file 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);                                                
}

E in process_add_identityfunzione:

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

lifetime è una variabile globale e cambia valore solo durante l'analisi dell'argomento:

/* 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();                                                        
        }
....
}

Se usi Ubuntu, puoi impostare le opzioni predefinite per ssh-agentin /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

Cosa divertente. Ho provato SSHAGENTARGS="-s -t 3600"e si ferma senza errori, schermo vuoto. Ma solo una curiosità, perché la tua risposta è corretta e non si ferma o altro.
Dr Beco,

15

Se stai chiamando ssh-adddalla riga di comando, crea un alias di shell. Inserisci la seguente riga nel tuo ~/.bashrc(se usi bash) o ~/.zshrc(se usi zsh) o in un altro file di inizializzazione della shell applicabile:

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

Se si desidera aggiungere una chiave non in scadenza, utilizzare \ssh-add /path/to/keyo ssh-add -t 0 /path/to/key.

Se ssh-addviene chiamato da un altro programma, vedere se possono essere configurati per accettare argomenti. In caso contrario , crea un file all'inizio del tuo $PATH( ~/binè una scelta comune di directory, assicurati che sia all'inizio del tuo PATHe crealo se non esiste) chiamato ssh-addcontenendo

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

(Sostituire /usr/bin/ssh-addcon il percorso del ssh-addbinario se necessario.)


Un alias di shell sarebbe probabilmente la scelta giusta.
Naftuli Kay,

10

Il timeout predefinito è per sempre. È comunque possibile impostare il timeout predefinito per un agente specifico tramite l' -topzione di ssh-agent.

dall'uomo 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.

1
C'è un modo per configurare in ssh-addmodo che l'impostazione predefinita sia qualcosa di diverso da sempre? Se corro ssh-addsenza parametri, mi piacerebbe che scada dopo un'ora.
Naftuli Kay,

Come avviare il ssh-agent?
Ouki,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.