SSH 에이전트의 기본 시간 종료 구성


10

ssh-addSSH 키를 SSH 에이전트에 추가 하는 데 사용 합니다. 기본적으로 무한정 추가됩니다. 시간 초과를 지정하는 명령 줄 옵션이 있지만 기본 시간 초과를 지정하는 구성 파일 옵션이 있습니까?

내가 원하는 것은 ssh-add명령 줄 매개 변수없이 실행 하고 시간 초과에 대해 주어진 시간 (기본값으로 호출 한 것처럼)을 기본값으로 사용하는 것 ssh-add -t 1h입니다.

답변:


7

AFAIK 에서 시간 제한을 지정 sshd_config하거나 구성 할 구성이 없습니다 . 에서 소스 코드 파일 :ssh_configssh-agentopensshssh-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);                                                
}

그리고 process_add_identity기능 :

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

lifetime 전역 변수이며 인수를 구문 분석 할 때만 값을 변경합니다.

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

Ubuntu를 사용하는 경우 다음 ssh-agent에서 기본 옵션을 설정할 수 있습니다 /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

재밌어요 시도했지만 SSHAGENTARGS="-s -t 3600"오류없이 빈 화면이 멈 춥니 다. 그러나 귀하의 답변이 정확하고 중단되지 않기 때문에 호기심 만 있습니다.
Dr Beco

15

ssh-add명령 행을 호출 하는 경우 쉘 별명을 작성하십시오. 다음 줄을 ~/.bashrc(bash를 사용하는 경우) 또는 ~/.zshrc(zsh를 사용하는 경우) 또는 기타 해당 쉘 초기화 파일에 넣으십시오 .

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

만료되지 않는 키를 추가하려면 \ssh-add /path/to/key또는을 사용하십시오 ssh-add -t 0 /path/to/key.

경우 ssh-add다른 프로그램에서 호출되는 그들이 인수를 구성 할 수있는 경우를 참조하십시오. 그 실패하는 것은, 초기 파일을 생성에 당신의 $PATH( ~/bin디렉토리의 일반적인 선택하게 확실히 그것은 당신의 시작 부분입니다입니다 PATH라고하고 존재하지 않는 경우 작성) ssh-add포함

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

( 필요 /usr/bin/ssh-add에 따라 ssh-add바이너리 경로로 대체하십시오 .)


쉘 별명은 아마도 올바른 행동 과정 일 것입니다.
Naftuli Kay 1

10

기본 시간 초과는 영구적입니다. 그러나 옵션을 통해 특정 에이전트 의 기본 시간 초과 를 설정할 수 있습니다 .-tssh-agent

남자에서 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
ssh-add기본값이 영원 이외의 것이되도록 구성하는 방법이 있습니까? ssh-add매개 변수없이 실행 하면 한 시간 후에 시간 초과되고 싶습니다.
Naftuli Kay

시작하는 방법 ssh-agent?
Ouki
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.