Configurando o Tempo Limite Padrão para o Agente SSH

10

Eu uso ssh-addpara 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-addsem nenhum parâmetro da linha de comando e configurá-lo como padrão para um determinado período de tempo durante um tempo limite (como se eu tivesse chamado ssh-add -t 1h).

Naftuli Kay
fonte

Respostas:

7

AFAIK, não há configuração em sshd_configou ssh_configpara especificar o tempo limite ssh-agent. No opensshcó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 em process_add_identityfunção:

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

lifetime é uma variável global e altera apenas 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ê usar o Ubuntu, você pode definir opções padrão para ssh-agentem /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
fonte
Coisa engraçada. Eu tentei SSHAGENTARGS="-s -t 3600"e ele pára sem erro, tela em branco. Mas apenas uma curiosidade, porque sua resposta está correta e não pára nem nada.
Dr Beco
15

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

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

Se você deseja adicionar uma chave não expirada, use \ssh-add /path/to/keyou ssh-add -t 0 /path/to/key.

Se ssh-addestiver sendo chamado de outro programa, veja se eles podem ser configurados para receber argumentos. Falhando isso, crie um arquivo cedo em seu $PATH( ~/biné uma escolha comum de diretório, verifique se ele está no início de seu PATHe criá-lo se ele não existir) chamou ssh-addcontendo

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

(Substitua /usr/bin/ssh-addpelo caminho para o ssh-addbinário, conforme necessário.)

Gilles 'SO- parar de ser mau'
fonte
Um apelido de shell provavelmente seria o curso de ação correto.
Naftuli Kay
10

O tempo limite padrão é para sempre. No entanto, é possível definir o tempo limite padrão para um agente específico através da -topção 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.
Ouki
fonte
1
Existe uma maneira de configurar ssh-addpara que o padrão seja algo que não seja para sempre? Se eu apenas rodar ssh-addsem nenhum parâmetro, gostaria que o tempo limite terminasse após uma hora.
Naftuli Kay
Como iniciar o ssh-agent?
Ouki