Настройка времени ожидания по умолчанию для агента SSH

10

Я использую, ssh-addчтобы добавить мои ключи SSH к агенту SSH. По умолчанию он добавляет их на неопределенный срок. Есть опция командной строки для указания времени ожидания, но есть ли опция файла конфигурации, которая будет указывать время ожидания по умолчанию?

Я хочу, чтобы у меня была возможность работать ssh-addбез каких-либо параметров командной строки и иметь по умолчанию заданное количество времени для тайм-аута (как если бы я звонил ssh-add -t 1h).

Нафтули Кей
источник

Ответы:

7

AFAIK, нет конфигурации sshd_configили ssh_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
cuonglm
источник
Забавная вещь. Я попытался, SSHAGENTARGS="-s -t 3600"и он останавливается без ошибок, пустой экран. Но просто любопытство, потому что ваш ответ правильный и не останавливается или что-то еще.
Доктор Беко
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двоичному файлу .)

Жиль "ТАК - перестань быть злым"
источник
Псевдоним оболочки, вероятно, будет правильным курсом действий.
Нафтули Кей
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.
Ouki
источник
1
Есть ли способ настроить ssh-addтак, чтобы по умолчанию было что-то другое, чем навсегда? Если бы я просто запускал ssh-addбез каких-либо параметров, я бы хотел, чтобы время ожидания истекло через час.
Нафтули Кей
Как запустить ssh-agent?
Ouki