我ssh-add
用来将我的 SSH 密钥添加到 SSH 代理。默认情况下,它会无限期地添加它们。有一个命令行选项可以指定超时,但是是否有一个配置文件选项可以指定默认超时?
我想要的是能够在ssh-add
没有任何命令行参数的情况下运行,并将其默认为给定的超时时间(就像我调用了ssh-add -t 1h
)。
Gil*_*il' 16
如果您在ssh-add
命令行上调用,请创建一个 shell 别名。将以下行放在您的~/.bashrc
(如果使用 bash)或~/.zshrc
(如果使用 zsh)或其他适用的 shell 初始化文件中:
alias ssh-add='ssh-add -t 1h'
Run Code Online (Sandbox Code Playgroud)
如果要添加非过期密钥,请使用\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 "$@"
Run Code Online (Sandbox Code Playgroud)
(根据需要替换/usr/bin/ssh-add
为ssh-add
二进制文件的路径。)
Ouk*_*uki 11
默认超时是永远。但是,可以通过选项为特定代理设置默认超时。-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.
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
在process_add_identity
功能上:
process_add_identity(SocketEntry *e, int version)
{
....
if (lifetime && !death)
death = monotime() + lifetime;
....
}
Run Code Online (Sandbox Code Playgroud)
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();
}
....
}
Run Code Online (Sandbox Code Playgroud)
如果您使用 Ubuntu,则可以为ssh-agent
in设置默认选项/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
Run Code Online (Sandbox Code Playgroud)