INTRODUCTION
One of the post which gets some attention on this blog is My Way For Binding SSH Agent With Zshell. The method presented there is far from ideal and it stopped to work for me some time ago. After that I wrote a new version. I think it is much better and should work with bash or other shells. I tested it on Ubuntu and Crux.ZSSH
I have the .zssh file in my home directory. It is sources by my .zshrc file. The .zssh consists of 3 functions.
SSHAGENT
The first function is responsible for starting ssh-agent.sshagent () {
SSHAGENT=$(ps ax|grep "[s]sh-agent"| grep -cv Z)
if (( $SSHAGENT == 0 ))
then
sshupdate
else
SSHPID="$(ps -eo pid,command | awk '/ ssh-[a]gent/ {print $1}');"
SSHPID_ENV=$(awk '/Agent/ {print $NF}' ~/.ssh-env)
if [[ $SSHPID == $SSHPID_ENV ]]
then
source ~/.ssh-env
else
killall ssh-agent
sshupdate
fi
fi
}
It checks if a ssh-agent runs already and it isn't a zombie. (On one of my systems, after starting a desktop environment, I always had a zombie ssh-agent running.) If there is no ssh-agent running the function calls sshupdate, another function described below. If the agent is present and live in a system the function then compares ssh-agent pid with the information saved in the ~/.ssh-env file. (See sshupdate paragraph for more information.) If informations are consistence it sources .ssh-env. If not it kills all ssh-agent and the calls sshupdate.
SSHUPDATE
This is a very simply function calling ssh-agent and saving its output to a file.sshupdate () {
ssh-agent > ~/.ssh-env
source ~/.ssh-env
}
The output then can be sourced by other functions or processes. Oh, and if you don't remember/know the output of ssh-agent looks like that:
SSH_AUTH_SOCK=/tmp/ssh-BnXafqRnOSHx/agent.1884;
export SSH_AUTH_SOCK;
SSH_AGENT_PID=1885;
export SSH_AGENT_PID;
echo Agent pid 1885;
SSHADD
Finally the function responsible for adding your ssh key.sshadd () {
if (( $(ssh-add -l | grep -c $USER) == 0 ))
then
ssh-add
else
ssh-add -l
fi
}
It checks the number of added keys. If a key from you home directory, or having your username in the path, is not present it adds it. Otherwise it lists all added keys.
No comments:
Post a Comment