diff --git a/ssh-find-agent.sh b/ssh-find-agent.sh index 3cd91d0..0833d75 100755 --- a/ssh-find-agent.sh +++ b/ssh-find-agent.sh @@ -58,10 +58,13 @@ sfa_set_path() { if [[ -n "$_TMPDIR_OVERRIDE" ]]; then sfa_path=("$_TMPDIR_OVERRIDE") else + # Add ~/.ssh/agent to support newer OpenSSH versions + # See: https://github.com/openssh/openssh-portable/commit/80162f9d7e7eadca4ffd0bd1c015d38cb1821ab6 + local ssh_agent_dir="${HOME}/.ssh/agent" if [[ -n "$TMPDIR" ]]; then - sfa_path=("/tmp" "$TMPDIR") + sfa_path=("/tmp" "$TMPDIR" "$ssh_agent_dir") else - sfa_path=("/tmp") + sfa_path=("/tmp" "$ssh_agent_dir") fi fi fi @@ -81,9 +84,10 @@ sfa_debug() { sfa_find_all_agent_sockets() { _ssh_agent_sockets=($( find "${sfa_path[@]}" -maxdepth 2 -type s -name agent.\* \ - -o -name S.gpg-agent.ssh -o -name ssh -o -regex '.*/ssh-.*/agent..*$' \ + -o -name S.gpg-agent.ssh -o -name ssh -o -name 's.*.agent.*' \ + -o -regex '.*/ssh-.*/agent..*$' \ 2>/dev/null | grep -E \ - '/ssh-.*/agent.*|/gpg- .*/S.gpg-agent.ssh|/keyring-.*/ssh$|.*/ssh-.*/agent..*$' + '/ssh-.*/agent.*|/gpg- .*/S.gpg-agent.ssh|/keyring-.*/ssh$|.*/ssh-.*/agent..*$|s\..*\.agent\..*' )) sfa_debug "${_ssh_agent_sockets[@]}" @@ -231,8 +235,17 @@ sfa_set_ssh_agent_socket() { esac # set agent pid - this is unreliable as the pid may be of the child rather than the agent + # Note: newer OpenSSH socket names (s.*.agent.*) don't contain the PID if [ -n "$SSH_AUTH_SOCK" ]; then - export SSH_AGENT_PID=$(($(basename "$SSH_AUTH_SOCK" | cut -d. -f2) + 1)) + local sock_basename + sock_basename=$(basename "$SSH_AUTH_SOCK") + # Only try to extract PID from old-style socket names (agent.*) + if [[ "$sock_basename" =~ ^agent\.([0-9]+)$ ]]; then + local pid_candidate="${BASH_REMATCH[1]}" + if [[ "$pid_candidate" =~ ^[0-9]+$ ]]; then + export SSH_AGENT_PID=$((pid_candidate + 1)) + fi + fi fi return 0