การกำหนดค่าการหมดเวลาเริ่มต้นสำหรับเอเจนต์ 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

สิ่งที่ตลก ฉันพยายามSSHAGENTARGS="-s -t 3600"และมันก็หยุดโดยไม่มีข้อผิดพลาดหน้าจอว่างเปล่า แต่เพียงแค่อยากรู้อยากเห็นเพราะคำตอบของคุณถูกต้องและไม่หยุดหรืออะไร
ดร. เบโก

15

หากคุณโทรหาssh-addบรรทัดคำสั่งให้สร้างชื่อแทนเชลล์ วางบรรทัดต่อไปนี้ใน~/.bashrc(ถ้าใช้ bash) หรือ~/.zshrc(ถ้าใช้ zsh) หรือไฟล์การกำหนดค่าเริ่มต้นเชลล์อื่น ๆ ที่เกี่ยวข้อง:

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-addด้วยพา ธ ไปยังssh-addไบนารีตามความจำเป็น)


นามแฝงของเชลล์อาจเป็นแนวทางที่ถูกต้อง
Naftuli Kay

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.