tb-dotfiles/chezmoi/dot_zshrc.d/executable_ssh.zsh

47 lines
1,006 B
Bash

SSH_ENV_CACHE="$HOME/.ssh/environment-$HOST"
function _start_agent() {
if _check_ssh_agent_connectivity; then
return
fi
if [[ -r "$SSH_ENV_CACHE" ]]; then
. $SSH_ENV_CACHE &> /dev/null
if _check_ssh_agent_connectivity; then
return
fi
fi
echo -n >! "$SSH_ENV_CACHE"
chmod 600 "$SSH_ENV_CACHE"
ssh-agent -s > "$SSH_ENV_CACHE"
. "$SSH_ENV_CACHE" > /dev/null
}
function _check_ssh_agent_connectivity() {
ssh-add -l &> /dev/null
if [[ $? -eq 2 ]]; then
return 1
fi
}
function add_ssh_keys() {
declare -a NEW_IDENTITIES
SSH_AGENT_IDENTITIES="$(ssh-add -l || true)"
2>/dev/null for IDENTITY_FILE in ~/.ssh/id_*~*.pub; do
if [[ "$SSH_AGENT_IDENTITIES" != *"$(ssh-keygen -lf "$IDENTITY_FILE")"* ]]; then
# skip _sk keys on MacOS for now
if ! [[ "$OSTYPE" =~ ^darwin ]] || ! [[ "$IDENTITY_FILE" =~ _sk$ ]]; then
NEW_IDENTITIES+=("$IDENTITY_FILE")
fi
fi
done
if [[ ${#NEW_IDENTITIES} -gt 0 ]]; then
ssh-add ${^NEW_IDENTITIES}
fi
}
_start_agent && add_ssh_keys