Limit ssh key lifetime to 12h in SSH sessions

This commit is contained in:
lachtan obecny
2026-10-22 10:59:34 +02:00
parent b3026487f0
commit 9630d412af
3 changed files with 19 additions and 1 deletions
+1
View File
@@ -19,6 +19,7 @@ and adds `bin/` to PATH. `$LWS` points to repo root.
- `is_slow_init` / `is_fast_init` — check `LWS_FAST` mode - `is_slow_init` / `is_fast_init` — check `LWS_FAST` mode
- `is_interactive_shell` — true when `[[ $- == *i* ]]` - `is_interactive_shell` — true when `[[ $- == *i* ]]`
- `is_wsl` — detect WSL environment - `is_wsl` — detect WSL environment
- `is_ssh_session` — true when logged in over SSH
- `true_false <val>` — normalize `1/true/yes` to boolean - `true_false <val>` — normalize `1/true/yes` to boolean
- `prepend_path` / `append_path` / `prepend_path_try` / `append_path_try` — safe PATH manipulation - `prepend_path` / `append_path` / `prepend_path_try` / `append_path_try` — safe PATH manipulation
- `source_try <file>` — source file if it exists - `source_try <file>` — source file if it exists
+5
View File
@@ -156,3 +156,8 @@ function true_false() {
function is_wsl() { function is_wsl() {
grep -q -i wsl /proc/version grep -q -i wsl /proc/version
} }
function is_ssh_session() {
# sshd sets SSH_CONNECTION only in sessions opened over SSH
[[ -n "${SSH_CONNECTION:-}" ]]
}
+13 -1
View File
@@ -7,6 +7,13 @@ function _log() {
_SSH_AGENT_NO_KEYS=1 _SSH_AGENT_NO_KEYS=1
_SSH_AGENT_NOT_RUNNING=2 _SSH_AGENT_NOT_RUNNING=2
SSH_KEY_TIMEOUT_HOURS=${SSH_KEY_TIMEOUT_HOURS:-12}
SSH_KEY_TIMEOUT_MINUTES=$((SSH_KEY_TIMEOUT_HOURS * 60))
function _should_limit_key_lifetime() {
! is_wsl && is_ssh_session
}
for key in id_ecdsa id_rsa; do for key in id_ecdsa id_rsa; do
key_filename="$HOME/.ssh/$key" key_filename="$HOME/.ssh/$key"
@@ -43,7 +50,12 @@ for key in id_ecdsa id_rsa; do
ssh-add "$key_filename" ssh-add "$key_filename"
fi fi
else else
eval "$(keychain --eval --quiet --agents ssh $key)" keychain_args=()
if _should_limit_key_lifetime; then
_log "Limiting key lifetime to $SSH_KEY_TIMEOUT_HOURS hours"
keychain_args=(--timeout "$SSH_KEY_TIMEOUT_MINUTES")
fi
eval "$(keychain --eval --quiet "${keychain_args[@]}" --agents ssh $key)"
fi fi
break break