ssh’s ControlMaster with zsh
You are using the ControlMaster
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.
Read other posts