Định cấu hình thời gian chờ mặc định cho tác nhân SSH


10

Tôi sử dụng ssh-addđể thêm các khóa SSH của mình vào tác nhân SSH. Theo mặc định, nó thêm chúng vô thời hạn. Có một tùy chọn dòng lệnh để chỉ định thời gian chờ, nhưng có tùy chọn tệp cấu hình sẽ chỉ định thời gian chờ mặc định không?

Điều tôi muốn là có thể chạy ssh-addmà không cần bất kỳ tham số dòng lệnh nào và mặc định nó có một khoảng thời gian nhất định cho một khoảng thời gian chờ (như thể tôi đã gọi ssh-add -t 1h).

Câu trả lời:


7

AFAIK, không có cấu hình trong sshd_confighoặc ssh_configđể chỉ định thời gian chờ ssh-agent. Từ opensshmã nguồn, tập tin 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);                                                
}

Và trong process_add_identitychức năng:

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

lifetime là biến toàn cục và chỉ thay đổi giá trị khi phân tích cú pháp đối số:

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

Nếu bạn sử dụng Ubuntu, bạn có thể đặt tùy chọn mặc định cho ssh-agenttại /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

Điều buồn cười. Tôi đã thử SSHAGENTARGS="-s -t 3600"và nó dừng lại không có lỗi, màn hình trống. Nhưng chỉ là một sự tò mò, bởi vì câu trả lời của bạn là chính xác và không dừng lại hoặc bất cứ điều gì.
Bác sĩ Beco

15

Nếu bạn đang gọi ssh-addtrên dòng lệnh, hãy tạo bí danh shell. Đặt dòng sau vào ~/.bashrc(nếu sử dụng bash) hoặc ~/.zshrc(nếu sử dụng zsh) hoặc tệp khởi tạo shell áp dụng khác:

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

Nếu bạn muốn thêm khóa không hết hạn, hãy sử dụng \ssh-add /path/to/keyhoặc ssh-add -t 0 /path/to/key.

Nếu ssh-addđang được gọi từ chương trình khác, hãy xem liệu chúng có thể được cấu hình để nhận đối số không. Không, hãy tạo một tệp sớm trên thư mục của bạn $PATH( ~/binlà một lựa chọn phổ biến của thư mục, đảm bảo rằng nó ở đầu của bạn PATHvà tạo tệp nếu nó không tồn tại) được gọi là ssh-addcó chứa

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

(Thay thế /usr/bin/ssh-addbằng đường dẫn đến ssh-addnhị phân khi cần thiết.)


Một bí danh vỏ có lẽ sẽ là hành động đúng đắn.
Naftuli Kay

10

Thời gian chờ mặc định là mãi mãi. Tuy nhiên, có thể đặt thời gian chờ mặc định cho một tác nhân cụ thể thông qua -ttùy chọn ssh-agent.

từ người đàn ông 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
Có cách nào để cấu hình ssh-addđể mặc định là một cái gì đó khác hơn là mãi mãi không? Nếu tôi chỉ chạy ssh-addmà không có bất kỳ tham số nào, tôi muốn nó hết thời gian sau một giờ.
Naftuli Kay

Làm thế nào để khởi chạy ssh-agent?
Ouki
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.