#!/bin/bash debug () { test -t 2 || return echo "$@" >&2 } # remote host HOST="$1" case $HOST in -l) HOST="$3" ;; -*) HOST="$2" ;; esac # remote domain for KEY in $HOME/.priv/ssh/*.pub ; do test -e "$KEY" || continue KEYDOMAIN=$(basename $KEY .pub) case $HOST in *.$KEYDOMAIN) DOMAIN="$KEYDOMAIN" break ;; esac if [ "$KEYDOMAIN" = "df7cb.de" ] ; then case $HOST in *.lan|*.sourceforge.net) DOMAIN="$KEYDOMAIN" break ;; esac fi if [ "$KEYDOMAIN" = "credativ.de" ] ; then case $HOST in *.credativ.com|*.credativ.lan|*.credativ.dmz) DOMAIN="$KEYDOMAIN" break ;; esac fi done # start per-domain ssh-agent if [ "$DOMAIN" ] ; then SOCKET="$HOME/.ssh/ssh-agent-$DOMAIN" # socket without pidfile, probably ssh-agent was interrupted while # asking for a passphrase if test -e "$SOCKET" && ! test -e "$SOCKET.pid" ; then debug "Removing socket $SOCKET without pid file" rm -f "$SOCKET" fi if test -e "$SOCKET.pid" ; then SSH_AGENT_PID=$(cat "$SOCKET.pid") if ! kill -0 "$SSH_AGENT_PID" 2> /dev/null ; then debug "Removing stale socket $SOCKET" rm -f "$SOCKET" "$SOCKET.pid" fi fi if test -e "$SOCKET" ; then debug "Using socket $SOCKET" SSH_AUTH_SOCK="$SOCKET" export SSH_AUTH_SOCK else eval $(ssh-agent -s -a "$SOCKET") echo "$SSH_AGENT_PID" > "$SOCKET.pid" fi if ! ssh-add -l | grep -q "$DOMAIN" ; then ssh-add $HOME/.priv/ssh/$DOMAIN fi fi # set terminal title case $TERM in screen*|xterm*|rxvt*) if test -t 1 ; then SHORTHOST=$(echo "$HOST" | sed -e 's/\.[a-z].*//') case $TERM in screen*) echo -en "\\033k$SHORTHOST\\033\\" ;; esac echo -en "\\033]0;$SHORTHOST\\007" fi ;; esac /usr/bin/ssh "$@"