52 lines
1.1 KiB
Bash
52 lines
1.1 KiB
Bash
# Start ssh agent for private key
|
|
|
|
function _log() {
|
|
xlog "[ssh-agent] $*"
|
|
}
|
|
|
|
_SSH_AGENT_NO_KEYS=1
|
|
_SSH_AGENT_NOT_RUNNING=2
|
|
|
|
for key in id_ecdsa id_rsa; do
|
|
key_filename="$HOME/.ssh/$key"
|
|
|
|
if [ -f "$key_filename" ]; then
|
|
_log "SSH key: $key_filename"
|
|
|
|
if is_wsl; then
|
|
_log "WSL ON"
|
|
|
|
if [ -z "$SSH_AUTH_SOCK" ]; then
|
|
export SSH_AUTH_SOCK=$HOME/.ssh/ssh-agent.sock
|
|
fi
|
|
|
|
_log "SSH_AUTH_SOCK: $SSH_AUTH_SOCK"
|
|
|
|
ssh-add -L &> /dev/null
|
|
ssh_add_status=$?
|
|
|
|
if [[ -S "$SSH_AUTH_SOCK" && $ssh_add_status -eq $_SSH_AGENT_NOT_RUNNING ]]; then
|
|
_log "SSH agent does not running, delete $SSH_AUTH_SOCK"
|
|
rm -f "$SSH_AUTH_SOCK"
|
|
fi
|
|
|
|
if [[ ! -S "$SSH_AUTH_SOCK" || $ssh_add_status -eq $_SSH_AGENT_NOT_RUNNING ]]; then
|
|
_log "Starting ssh-agent"
|
|
eval "$(ssh-agent -s -a "$SSH_AUTH_SOCK")"
|
|
fi
|
|
|
|
ssh-add -L &> /dev/null
|
|
ssh_add_status=$?
|
|
|
|
if [[ $ssh_add_status -eq $_SSH_AGENT_NO_KEYS ]]; then
|
|
_log "Adding SSH key to agent"
|
|
ssh-add "$key_filename"
|
|
fi
|
|
else
|
|
eval "$(keychain --eval --quiet --agents ssh $key)"
|
|
fi
|
|
|
|
break
|
|
fi
|
|
done
|