Skip to content

Instantly share code, notes, and snippets.

@jettero
Last active December 8, 2017 18:23
Show Gist options
  • Save jettero/3e5c7e75eb495e448ce298522b6053c2 to your computer and use it in GitHub Desktop.
Save jettero/3e5c7e75eb495e448ce298522b6053c2 to your computer and use it in GitHub Desktop.
my ssh-agent zookeeper
# to use from your .bashrc, do something like:
# if [[ "$-" =~ i ]]; then ~/.ssh-agent-zookeeper.sh; ssh-zoo; fi
function _source_agent_vars {
if [ -z "$SSH_AGENT_SOCKET_FILE" ]; then
echo run the ssh-zoo-setup first
return 1
fi
[ -f "$SSH_AGENT_VARS_FILE" ] && source "$SSH_AGENT_VARS_FILE"
if [ -n "$TMUX" -a -n "$TMUX_NAME" -a "$SSH_AUTH_SOCK" ]; then
tmux setenv SSH_AGENT_SOCKET_DIR "$SSH_AGENT_SOCKET_DIR"
tmux setenv SSH_AGENT_SOCKET_FILE "$SSH_AGENT_SOCKET_FILE"
tmux setenv SSH_AGENT_VARS_FILE "$SSH_AGENT_VARS_FILE"
tmux setenv SSH_AGENT_IDENTITIES_FILE "$SSH_AGENT_IDENTITIES_FILE"
tmux setenv SSH_AUTH_SOCK "$SSH_AUTH_SOCK"
tmux setenv SSH_AGENT_PID "$SSH_AGENT_PID"
fi
}
function _invoke-ssh-agent {
if [ -z "$SSH_AGENT_SOCKET_FILE" ]; then
echo run the ssh-zoo-setup first
return 1
fi
[ -f ~/.zoo.sh ] && rm ~/.zoo.sh
[ -S "$SSH_AGENT_SOCKET_FILE" ] && (set -x; ssh-agent -a "$SSH_AGENT_SOCKET_FILE" -k)
[ -e "$SSH_AGENT_SOCKET_FILE" ] && (set -x; rm "$SSH_AGENT_SOCKET_FILE")
ssh-agent -a "$SSH_AGENT_SOCKET_FILE" > "$SSH_AGENT_VARS_FILE"
_source_agent_vars
if [ -n "$SSH_AGENT_IDENTITIES_FILE" -a -f "$SSH_AGENT_IDENTITIES_FILE" ]; then
while read line; do
if [ -f "$line" ]; then
ssh-add "$line"
fi
done < "$SSH_AGENT_IDENTITIES_FILE"
else
ssh-add # add default identity
fi
}
function ssh-zoo-setup {
# GNOME keyring daemon fucks up ssh-agents badly
# GNOME_KEYRING_CONTROL=/run/user/1000/keyring-IwU0w9
# GNOME_KEYRING_PID=13441
unset GNOME_KEYRING_CONTROL
unset GNOME_KEYRING_PID
export SSH_AGENT_SOCKET_DIR=~/.ssh/agent
export SSH_AGENT_SOCKET_FILE="$SSH_AGENT_SOCKET_DIR/default-agent.socket"
export SSH_AGENT_VARS_FILE="$SSH_AGENT_SOCKET_DIR/default-agent.sh"
export SSH_AGENT_IDENTITIES_FILE="$HOME/.ssh-agent-ids"
[ -d "$SSH_AGENT_SOCKET_DIR" ] || mkdir -p "$SSH_AGENT_SOCKET_DIR"
chmod 0700 "$SSH_AGENT_SOCKET_DIR"
if [ -n "$TMUX" ]; then
TMUX_NAME="$( tmux display -p '#S' )"
while [[ "$TMUX_NAME" =~ -g$ ]]; do
TMUX_NAME="${TMUX_NAME%-g}"
done
if [[ -n "$TMUX_NAME" && ! "$TMUX_NAME" =~ [^a-zA-Z0-9._-] ]]; then
export SSH_AGENT_SOCKET_FILE="$SSH_AGENT_SOCKET_DIR/$TMUX_NAME-agent.socket"
export SSH_AGENT_VARS_FILE="$SSH_AGENT_SOCKET_DIR/$TMUX_NAME-agent.sh"
export SSH_AGENT_IDENTITIES_FILE="$HOME/.ssh-agent-$TMUX_NAME-ids"
fi
fi
_source_agent_vars
}
function ssh-zoo {
ssh-zoo-setup
ssh-add -l &>/dev/null || _invoke-ssh-agent
echo "Should be all set!"
echo
echo "ssh-agent environment:"
set | grep -E "^(SSH_AGENT_PID|SSH_AUTH_SOCK)" | sed -e 's/^/ /'
echo
echo "ssh-agent fingerprints:"
ssh-add -l | sed -e 's/^/ /'
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment