Mengkonfigurasi batas waktu default untuk agen SSH

10

Saya gunakan ssh-adduntuk menambahkan kunci SSH saya ke agen SSH. Secara default, itu menambahkan mereka tanpa batas. Ada opsi baris perintah untuk menentukan batas waktu, tetapi apakah ada opsi file konfigurasi yang akan menentukan batas waktu default?

Apa yang saya inginkan adalah dapat berjalan ssh-addtanpa parameter baris perintah dan memilikinya default ke jumlah waktu tertentu untuk waktu habis (seolah-olah saya telah menelepon ssh-add -t 1h).

Naftuli Kay
sumber

Jawaban:

7

AFAIK, tidak ada konfigurasi dalam sshd_configatau ssh_configuntuk menentukan batas waktu ssh-agent. Dari opensshkode sumber, file 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);                                                
}

Dan dalam process_add_identityfungsi:

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

lifetime adalah variabel global dan hanya mengubah nilai saat menguraikan argumen:

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

Jika Anda menggunakan Ubuntu, Anda dapat mengatur opsi default untuk ssh-agentdi /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
sumber
Hal yang lucu. Saya mencoba SSHAGENTARGS="-s -t 3600"dan berhenti tanpa kesalahan, layar kosong. Tetapi hanya rasa ingin tahu, karena jawaban Anda benar dan tidak berhenti atau apa pun.
Dr Beco
15

Jika Anda menelepon ssh-addpada baris perintah, buat alias shell. Masukkan baris berikut di file Anda ~/.bashrc(jika menggunakan bash) atau ~/.zshrc(jika menggunakan zsh) atau file inisialisasi shell lain yang berlaku:

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

Jika Anda ingin menambahkan kunci yang tidak kedaluwarsa, gunakan \ssh-add /path/to/keyatau ssh-add -t 0 /path/to/key.

Jika ssh-adddipanggil dari program lain, lihat apakah mereka dapat dikonfigurasi untuk mengambil argumen. Gagal itu, buat file lebih awal pada Anda $PATH( ~/binadalah pilihan umum direktori, pastikan itu di awal Anda PATHdan buat jika tidak ada) yang disebut ssh-addmengandung

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

(Ganti /usr/bin/ssh-adddengan path ke ssh-addbinary sebagaimana diperlukan.)

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Shell alias mungkin akan menjadi tindakan yang tepat.
Naftuli Kay
10

Batas waktu default adalah selamanya. Namun dimungkinkan untuk mengatur batas waktu default untuk agen tertentu melalui -topsi ssh-agent.

dari man 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
sumber
1
Apakah ada cara untuk mengkonfigurasi ssh-addsehingga default adalah sesuatu selain selamanya? Jika saya hanya menjalankan ssh-addtanpa parameter, saya ingin waktu habis setelah satu jam.
Naftuli Kay
Bagaimana cara meluncurkan ssh-agent?
Ouki