X-Git-Url: http://git.iain.cx/?p=profile.git;a=blobdiff_plain;f=.profile.d%2Fssh.bashrc;h=0bb5011ff7c72f2d7d978ca064487a348fbc03f8;hp=17cd4bb01018e2240f88a1a75eaba2a7e99686b4;hb=b10ea19961f0abe25a9459b73bb8b8e966544168;hpb=819bb88d5a014a23150b8fd609d194e883958674 diff --git a/.profile.d/ssh.bashrc b/.profile.d/ssh.bashrc index 17cd4bb..0bb5011 100644 --- a/.profile.d/ssh.bashrc +++ b/.profile.d/ssh.bashrc @@ -1,46 +1,17 @@ -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" + # 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 - -unset SOCKET -unset get_agent_pid