Automatically load ssh keys : Add to .bashrc and configure environment variable.
export SSH_DIR="${HOME}/.ssh"
command mkdir -p "${SSH_DIR}"
if [[ -z "${SSH_AUTH_SOCK:-}" ]] ; then
eval "$(ssh-agent -s)" >/dev/null 2>&1
export SSH_AUTH_SOCK="${SSH_AUTH_SOCK}"
fi
export SSH_AGENT_LIFE=14400 # 4 hours
export SSHADD_OPTS=()
export PASS_SSH_ENTRY_PREFIX="_ssh"
if command -v pass &>/dev/null \
&& command -v gpg &>/dev/null \
; then
for _public_key in "${SSH_DIR}"/*.pub ; do
_private_key="${_public_key%.pub}"
_entry="$(basename "${_private_key}")"
if command pass ls "${PASS_SSH_ENTRY_PREFIX}/${_entry}" &>/dev/null ; then
_fingerprint="$(command ssh-keygen -lf "${_public_key}" || true)"
_loaded_keys="$(command ssh-add -l || true)"
if ! command grep -qF -- "${_fingerprint}" < <(echo "${_loaded_keys}") ; then
_ask="${SSH_DIR}/ssh-askpass.sh"
(\
echo '#!/usr/bin/env -S bash -euo pipefail' ; \
echo ; \
echo "command pass '${PASS_SSH_ENTRY_PREFIX}/${_entry}/password' | command head -n 1" \
) > "${_ask}"
command chmod u+x "${_ask}"
DISPLAY="${DISPLAY:-dummy}" \
SSH_ASKPASS_REQUIRE=force \
SSH_ASKPASS="${_ask}" \
command ssh-add -t "${SSH_AGENT_LIFE}" "${SSHADD_OPTS[@]}" "${_private_key}"
fi
fi
done
command rm -f "${_ask}"
[ -n "${_ask}" ] && echo
unset _public_key _private_key _fingerprint _loaded_keys _entry _ask
fi
My pass ssh entries:
$ pass _ssh/
_ssh
└── id_termux
├── cipher
├── note
├── password
├── privateKey.priv
└── publicKey.pub
...