X-Git-Url: https://git.distorted.org.uk/~mdw/profile/blobdiff_plain/c388de2b95b72a4e84fef6337b8a703d436f883f..6d6f2b519e037c3cfd417638f7acbde14d5ccc38:/bin/start-ssh-agent diff --git a/bin/start-ssh-agent b/bin/start-ssh-agent index c72e129..bfb2608 100755 --- a/bin/start-ssh-agent +++ b/bin/start-ssh-agent @@ -8,7 +8,7 @@ case "${SHELL-/bin/sh}" in *csh*) style=csh;; *) style=sh;; esac -force= chosen= commands= +force=nil chosen= commands= while [ $# -gt 0 ]; do case "$1" in -h | --help) echo "$usage"; exit 0 ;; @@ -29,36 +29,57 @@ case $chosen,$style in ;; esac -### Should I start a new agent? -case "$force,$SSH_AUTH_SOCK" in - t,* | ,) - start=t - ;; - *) - start= - set +e; ssh-add -l >/dev/null 2>&1; rc=$?; set -e - [ $rc -ge 2 ] && start=t +## Some useful variables. +hostname=${HOST-$(hostname)} +user=${USER-${LOGNAME-$(id -un)}} uid=${UID-$(id -u)} +dir=$TMPDIR/.ssh-agent.$hostname.$user +socket=$dir/sock; pid=$dir/pid +export SSH_AUTH_SOCK + +## Should I start a new agent? +foundp=nil +case $force in + nil) + case ${SSH_AUTH_SOCK+t} in + t) + set +e; ssh-add -l >/dev/null 2>&1; rc=$?; set -e + if [ $rc -lt 2 ]; then foundp=t; fi + ;; + esac + case $foundp in + t) ;; + *) + for i in \ + "$HOME/.cache/keyring-"*"/ssh" \ + "/run/user/$uid/keyring/ssh" \ + "$socket" + do + SSH_AUTH_SOCK=$i + set +e; ssh-add -l >/dev/null 2>&1; rc=$?; set -e + if [ $rc -lt 2 ]; then foundp=t; break; fi + done + ;; + esac ;; esac ### If so, do that -if [ "$start" ]; then - hostname=${HOST-$(hostname)} - user=${USER-${LOGNAME-$(whoami)}} - dir=$TMPDIR/.ssh-agent.$hostname.$user; socket=$dir/sock; pid=$dir/pid - mkdir -p -m700 "$dir" - SSH_AUTH_SOCK=$socket; export SSH_AUTH_SOCK - set +e; ssh-add -l >/dev/null 2>&1; rc=$?; set -e - if [ $rc -ge 2 ]; then - if [ -f "$pid" ]; then - kill $(cat "$pid") >/dev/null 2>&1 || : +case $foundp in + nil) + mkdir -p -m700 "$dir" + SSH_AUTH_SOCK=$socket + set +e; ssh-add -l >/dev/null 2>&1; rc=$?; set -e + if [ $rc -ge 2 ]; then + if [ -f "$pid" ]; then + kill $(cat "$pid") >/dev/null 2>&1 || : + fi + rm -f "$socket" "$pid" + (cd /; exec ssh-agent -d -a "$socket" >/dev/null 2>&1)& + echo $! >"$pid" + SSH_AUTH_SOCK=$socket fi - rm -f "$socket" "$pid" - (cd /; exec ssh-agent -d -a "$socket" >/dev/null 2>&1)& - echo $! >"$pid" - SSH_AUTH_SOCK=$socket; export SSH_AUTH_SOCK - fi -fi + ;; +esac ### Run a program, or export the details case $style in