X-Git-Url: https://git.distorted.org.uk/~mdw/profile/blobdiff_plain/239bb58ea317b6daf9ecabb10e923f8a94891bf6..a2cb2ff4217f955f1cfbc836927f8a9f8f57b9eb:/bin/start-ssh-agent diff --git a/bin/start-ssh-agent b/bin/start-ssh-agent index afcfc72..88fd657 100755 --- a/bin/start-ssh-agent +++ b/bin/start-ssh-agent @@ -29,22 +29,43 @@ case $chosen,$style in ;; esac +## Check that this stands a chance of working. +if ! type >/dev/null 2>&1 ssh-agent || ! type >/dev/null >&1 ssh-add; then + echo >&2 "$0: ssh not installed; chickening out" + exit 1 +fi + ## Some useful variables. hostname=${HOST-$(hostname)} -user=${USER-${LOGNAME-$(id -un)}} +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? -case "$force,$SSH_AUTH_SOCK" in - t,* | nil,) - foundp=nil - ;; - *) - foundp=t - set +e; ssh-add -l >/dev/null 2>&1; rc=$?; set -e - [ $rc -ge 2 ] && foundp=nil +## 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 @@ -53,13 +74,20 @@ case $foundp in nil) mkdir -p -m700 "$dir" SSH_AUTH_SOCK=$socket + p=$PATH + runes= + while :; do + case $p in *:*) d=${p%%:*} p=${p#*:} ;; *) d=$p p= ;; esac + if [ -x "${d+$d/}setsid" ]; then runes="$runes setsid"; break; fi + case $p in "") break ;; esac + done 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)& + (cd /; exec $runes ssh-agent -d -a "$socket" /dev/null 2>&1)& echo $! >"$pid" SSH_AUTH_SOCK=$socket fi