配置SSH代理的默认超时


10

ssh-add用来将SSH密钥添加到SSH代理中。默认情况下,它会无限期地添加它们。有一个命令行选项可以指定超时时间,但是有一个配置文件选项可以指定默认超时时间吗?

我想要的是能够在ssh-add没有任何命令行参数的情况下运行,并且将其默认设置为给定的超时时间(就像我已经调用一样ssh-add -t 1h)。

Answers:


7

据我所知,没有在任何配置sshd_configssh_config指定时间出来ssh-agent。从openssh源代码中,文件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);                                                
}

并在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",它停止了,没有错误,黑屏。只是出于好奇,因为您的回答是正确的,不会停止或执行任何操作。
Beco博士

15

如果ssh-add在命令行上调用,请创建一个shell别名。将以下行放入您的~/.bashrc(如果使用bash)或~/.zshrc(如果使用zsh)或其他适用的shell初始化文件中:

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

如果要添加非到期密钥,请使用\ssh-add /path/to/keyssh-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-addssh-add二进制文件的路径。)


Shell别名可能是正确的做法。
Naftuli Kay 2014年

10

默认超时是永远。但是,可以设置默认的超时时间通过特定代理-t的选项ssh-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 2014年

如何启动ssh-agent
Ouki 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.