# $Id$ SOCKET=~/.ssh/agent function get_agent_pid() { ps waux | grep -- ^$USER\ .\*ssh-agent\ -a\ .\*\ -s | grep -v grep | awk '{ print $2 }' | head -n 1 } if [ ! -z "$SSH_CLIENT" ]; then # Set display if we aren't already forwarding X11 if [ "$DISPLAY" = "" ]; then export DISPLAY="$(echo $SSH_CLIENT | cut -s -d ' ' -f 1):0" fi fi # Try to hook up with already running ssh-agent. if [ $UID -gt 0 ]; then # 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" fi fi unset RUNNING_AGENT fi unset SOCKET unset get_agent_pid