Last active
December 8, 2017 18:23
-
-
Save jettero/3e5c7e75eb495e448ce298522b6053c2 to your computer and use it in GitHub Desktop.
my ssh-agent zookeeper
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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