Konfigurieren des Standardzeitlimits für den SSH-Agenten

10

Ich verwende ssh-add, um meine SSH-Schlüssel zum SSH-Agenten hinzuzufügen. Standardmäßig werden sie auf unbestimmte Zeit hinzugefügt. Es gibt eine Befehlszeilenoption zum Festlegen eines Zeitlimits. Gibt es jedoch eine Konfigurationsdateioption, mit der das Standardzeitlimit angegeben wird?

Ich möchte in der Lage sein, ssh-addohne Befehlszeilenparameter ausgeführt zu werden und standardmäßig eine bestimmte Zeitspanne für eine Zeitüberschreitung festzulegen (als hätte ich angerufen ssh-add -t 1h).

Naftuli Kay
quelle

Antworten:

7

AFAIK, es gibt keine Konfiguration in sshd_configoder ssh_configum das Zeitlimit für anzugeben ssh-agent. Aus dem opensshQuellcode, Datei 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);                                                
}

Und in process_add_identityFunktion:

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

lifetime ist eine globale Variable und ändert den Wert nur beim Parsen von Argumenten:

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

Wenn Sie Ubuntu verwenden, können Sie die Standardoptionen für gesetzt ssh-agentin /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
quelle
Lustige Sache. Ich habe es versucht SSHAGENTARGS="-s -t 3600"und es hält ohne Fehler an, leerer Bildschirm. Aber nur eine Kuriosität, denn Ihre Antwort ist richtig und hört nicht auf oder so.
Dr. Beco
15

Wenn Sie ssh-addüber die Befehlszeile aufrufen , erstellen Sie einen Shell-Alias. Fügen Sie die folgende Zeile in Ihre ~/.bashrc(wenn Sie bash verwenden) oder ~/.zshrc(wenn Sie zsh verwenden) oder eine andere anwendbare Shell-Initialisierungsdatei ein:

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

Wenn Sie einen nicht ablaufenden Schlüssel hinzufügen möchten, verwenden Sie \ssh-add /path/to/keyoder ssh-add -t 0 /path/to/key.

Wenn ssh-addvon einem anderen Programm aufgerufen wird, prüfen Sie, ob diese für die Annahme von Argumenten konfiguriert werden können. Gelingt das nicht , erstellen Sie eine Datei früh auf $PATH( ~/binist eine gemeinsame Wahl des Verzeichnisses, stellen Sie sicher , dass es am Anfang Ihres ist PATHund es schaffen , wenn sie nicht existiert) genannt ssh-addenthält ,

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

(Bei Bedarf /usr/bin/ssh-adddurch den Pfad zur ssh-addBinärdatei ersetzen .)

Gilles 'SO - hör auf böse zu sein'
quelle
Ein Shell-Alias ​​wäre wahrscheinlich die richtige Vorgehensweise.
Naftuli Kay
10

Das Standardzeitlimit ist für immer. Es ist jedoch möglich, das Standardzeitlimit für einen bestimmten Agenten über die -tOption festzulegen ssh-agent.

vom Menschen 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
quelle
1
Gibt es eine Möglichkeit, ssh-addso zu konfigurieren , dass der Standard etwas anderes als für immer ist? Wenn ich nur ssh-addohne Parameter laufe , möchte ich, dass nach einer Stunde eine Zeitüberschreitung auftritt.
Naftuli Kay
Wie starte ich das ssh-agent?
Ouki