ssh-add
を使用して、SSHキーをSSHエージェントに追加します。デフォルトでは、無期限に追加されます。タイムアウトを指定するコマンドラインオプションがありますが、デフォルトのタイムアウトを指定する構成ファイルオプションはありますか?
私が欲しいのは、コマンドラインパラメータなしでssh-add
を実行し、タイムアウトの既定の時間に設定することです(ssh-add -t 1h
を呼び出したかのように)。
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
コマンドラインでssh-add
を呼び出す場合は、シェルエイリアスを作成します。 ~/.bashrc
(bashを使用している場合)または~/.zshrc
(zshを使用している場合)またはその他の該当するシェル初期化ファイルに次の行を追加します。
alias ssh-add='ssh-add -t 1h'
有効期限のないキーを追加する場合は、\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 "$@"
(必要に応じて、/usr/bin/ssh-add
をssh-add
バイナリへのパスに置き換えます。)
デフォルトのタイムアウトは無期限です。ただし、-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.