# ssh's ControlMaster with zsh


You are using the [ControlMaster](http://www.linux.com/feature/54498)
feature of `ssh` and you are having problems remembering
which shell is the master? 

That's why I've made `zsh` display this in the prompt.
You get a `m@` when a connection is a master connection and 
an `@` if it is a slave.

# setting up

The check if we are a master works by creating a file
which has `$SSH_CLIENT` as the name, as the following snippet shows.

    # ssh stuff
    # check if we are the master or a slave connection
    # this must be sourced before .zprompt is

    # print @-sign before the hostname if we got into this host via SSH
    if [ -z $SSH_TTY ]; then
	ZSSH=
    else
	if [[ ! -e ~/.ssh/${SSH_CLIENT// /_} ]]; then
	    # file does not exist, we are a master
	    touch ~/.ssh/${SSH_CLIENT// /_}
	    ZSSH="m@"
	else
	    # slave connection
	    ZSSH="@"
	fi
    fi

# tearing down

Make `zsh` remove the file when it exits.

    TRAPEXIT() {
	echo $PWD > ~/.zpwd
	# $ZSSH has @ for slaves and M@ for masters
	[[ $ZSSH == "m@" ]] && rm ~/.ssh/${SSH_CLIENT// /_}
    }

You can now use `$ZSSH` in your prompt.

