Bash 4 stuff.
[profile.git] / .profile.d / ssh.bashrc
index b82a987..0bb5011 100644 (file)
@@ -1,26 +1,17 @@
-# $Id$
-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
-  RUNNING_AGENT="$(ps waux | grep -- ^$USER\ .\*ssh-agent\ -s | grep -v grep | awk '{ print $2 }' | head -n 1)"
-  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.
-      eval $(/usr/bin/ssh-agent -s)
-      trap "kill $SSH_AGENT_PID" 0
-      ssh-add
-    else
-      export SSH_AUTH_SOCK="/$(lsof -p $SSH_AGENT_PID | grep 'agent.[0-9]*$' | cut -s -d / -f 2-)"
+  # 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
     fi
   fi
-  unset RUNNING_AGENT
 fi