Configurando o tempo limite padrão para o agente SSH

10

Eu uso ssh-add para adicionar minhas chaves SSH ao agente SSH. Por padrão, ele os adiciona indefinidamente. Há uma opção de linha de comando para especificar um tempo limite, mas existe uma opção de arquivo de configuração que especificará o tempo limite padrão?

O que eu quero é poder executar ssh-add sem nenhum parâmetro de linha de comando e ter o padrão para um determinado período de tempo para um tempo limite (como se eu tivesse chamado ssh-add -t 1h ).

    
por Naftuli Kay 01.04.2014 / 07:42

3 respostas

6

AFAIK, não há configuração em sshd_config ou ssh_config para especificar o tempo limite para ssh-agent . De openssh código-fonte, arquivo 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 na função process_add_identity :

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

lifetime é uma variável global e só altera o valor ao analisar o 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();                                                        
        }
....
}

Se você usa o Ubuntu, pode definir opções padrão para ssh-agent em /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
    
por 01.04.2014 / 10:14
15

Se você estiver chamando ssh-add na linha de comando, crie um alias de shell. Coloque a seguinte linha no arquivo ~/.bashrc (se estiver usando bash) ou ~/.zshrc (se estiver usando zsh) ou outro arquivo de inicialização de shell aplicável:

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

Se você quiser adicionar uma chave que não expira, use \ssh-add /path/to/key ou ssh-add -t 0 /path/to/key .

Se ssh-add estiver sendo chamado de outro programa, veja se eles podem ser configurados para aceitar argumentos. Caso contrário, crie um arquivo no início do seu $PATH ( ~/bin é uma escolha comum de diretório, verifique se ele está no início do seu PATH e crie-o se ele não existir) chamado ssh-add contendo

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

(Substitua /usr/bin/ssh-add pelo caminho do binário ssh-add conforme necessário.)

    
por 02.04.2014 / 00:56
7

O tempo limite padrão é para sempre. No entanto, é possível definir o tempo limite padrão para um agente específico por meio da opção -t de ssh-agent .

do homem 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.
    
por 01.04.2014 / 09:00

Tags