#!/bin/sh # ssh-agent-persist - create or reuse an ssh-agent as needed # Andrew Ho (andrew@zeuscat.com) # # Usage: eval `ssh-agent-persist` # Stores state directory in ~/.ssh-agent/`hostname` # Also see ssh-agent-kill to clear existing ssh-agent invocations # # See http://www.zeuscat.com/andrew/software/desktop_hacks/#ssh-agent-persist # for some background information about how I use this script. ME=`basename "$0"` IDENTITY_FILES='id_rsa' # Edit this to add keys, if necessary if [ "x$HOME" = "x" ]; then echo "echo '$ME: could not determine home directory' 2>&1" exit 1 fi SSH_AGENT_ROOT="$HOME/.ssh-agent" if [ ! -d "$SSH_AGENT_ROOT" ]; then echo "echo '$ME: creating state directory $SSH_AGENT_ROOT' 2>&1" mkdir -p "$SSH_AGENT_ROOT" if [ ! -d "$SSH_AGENT_ROOT" ]; then echo "echo '$ME: could not create $SSH_AGENT_ROOT' 2>&1;" exit 1 fi fi if [ ! -w "$SSH_AGENT_ROOT" ]; then echo "echo '$ME: state directory $SSH_AGENT_ROOT is not writeable' 2>&1;" exit 1 fi HOSTNAME=`hostname` if [ "x$HOSTNAME" = "x" ]; then echo "echo '$ME: could not determine hostname' 2>&1;" HOSTNAME=unknown fi filename="$SSH_AGENT_ROOT/$HOSTNAME" if [ -f "$filename" ]; then eval `cat "$filename"` if [ "x$SSH_AUTH_SOCK" != "x" ] && [ -w "$SSH_AUTH_SOCK" ]; then echo "echo 'Re-using existing ssh-agent socket.';" cat "$filename" else echo "echo 'Replacing existing but invalid ssh-agent socket.';" rm "$filename" ssh-agent | grep '=' | tee "$filename" for f in $IDENTITY_FILES ; do echo "ssh-add '$HOME/.ssh/$f';" done fi else echo "echo 'Creating new ssh-agent socket.';" ssh-agent | grep '=' | tee "$filename" for f in $IDENTITY_FILES ; do echo "ssh-add '$HOME/.ssh/$f';" done fi exit 0