- # Not all OSes support ``ps -wu''.
- RUNNING_AGENT="$(get_agent_pid)"
-
- # Has the socket gone away?
- if [ ! -z "$RUNNING_AGENT" -a ! -S "$SOCKET" ]; then
- if kill $RUNNING_AGENT; then
- RUNNING_AGENT="$(get_agent_pid)"
- else
- echo >&2 "$SOCKET has gone away but agent is running as PID $RUNNING_AGENT."
- fi
- fi
-
- if [ -z "$SSH_AGENT_PID" -o ! "$SSH_AGENT_PID" = "$RUNNING_AGENT" ]; then
- export SSH_AGENT_PID="$RUNNING_AGENT"
- if [ "$SSH_AGENT_PID" = "" ]; then
- unset SSH_AGENT_PID
- unset SSH_AUTH_SOCK
- # Start ssh-agent up then.
- rm -f "$SOCKET"
- eval $(/usr/bin/ssh-agent -a "$SOCKET" -s)
- trap "kill $SSH_AGENT_PID" 0
- ssh-add
- else
- export SSH_AUTH_SOCK="$SOCKET"
+ # Hack to prevent confusion between two agents when launched from xdm.
+ if [ ! $SHLVL = 1 -o -z "$DESKTOP_SESSION" ]; then
+ # Read a list of hosts which can run an agent from ~/.ssh/agenthosts.
+ if [ -f ~/.ssh/agenthosts ]; then
+ while read allowed; do
+ if [ "${HOSTNAME%%.*}" = "$allowed" ]; then
+ eval $(keychain -q --timeout 7200 --agents ssh --eval)
+ if tty -s; then
+ ssh-add -l >/dev/null || ssh-add
+ fi
+ fi
+ done < ~/.ssh/agenthosts
+ unset allowed