Skip to content

Instantly share code, notes, and snippets.

@qntmpkts
Created December 30, 2016 03:48
Show Gist options
  • Save qntmpkts/e19feee49a296f1498d1b0e8d0d15a29 to your computer and use it in GitHub Desktop.
Save qntmpkts/e19feee49a296f1498d1b0e8d0d15a29 to your computer and use it in GitHub Desktop.
ssh-agent oh-my-zsh plugin for termux
typeset _agent_forwarding _ssh_env_cache
function _clear_agent() {
rx="^ssh-"
tmp="/data/data/com.termux/files/usr/tmp"
_ssh_env_cache="$HOME/.ssh/environment-$SHORT_HOST"
. $_ssh_env_cache > /dev/null
SSH_CHECK_AGENT_PID=$(ps x | grep ssh-agent | grep -v "grep " | awk '{print $1}')
if [[ -z $SSH_CHECK_AGENT_PID || $SSH_CHECK_AGENT_PID != $SSH_AGENT_PID ]]; then
if [[ -e $_ssh_env_cache ]]; then
if [[ ! -z $SSH_CHECK_AGENT_PID ]]; then killall -9 ssh-agent; fi
rm $_ssh_env_cache
fi
fi
if [[ $SSH_CHECK_AGENT_PID = $SSH_AGENT_PID ]]; then
#echo ssh-agent found...
else
for f in $(ls $tmp); do
if [[ -d $f && $f =~ $rx ]]; then rm -rf "${tmp}/${f}"; fi
done
fi
unset _ssh_env_cache
}
function _start_agent() {
local lifetime
local -a identities
# start ssh-agent and setup environment
zstyle -s :omz:plugins:ssh-agent lifetime lifetime
ssh-agent -s ${lifetime:+-t} ${lifetime} | sed 's/^echo/#echo/' >! $_ssh_env_cache
chmod 600 $_ssh_env_cache
. $_ssh_env_cache > /dev/null
# load identities
zstyle -a :omz:plugins:ssh-agent identities identities
echo starting ssh-agent...
ssh-add $HOME/.ssh/${^identities}
}
_clear_agent
# Get the filename to store/lookup the environment from
_ssh_env_cache="$HOME/.ssh/environment-$SHORT_HOST"
# test if agent-forwarding is enabled
zstyle -b :omz:plugins:ssh-agent agent-forwarding _agent_forwarding
if [[ $_agent_forwarding == "yes" && -n "$SSH_AUTH_SOCK" ]]; then
# Add a nifty symlink for screen/tmux if agent forwarding
[[ -L $SSH_AUTH_SOCK ]] || ln -sf "$SSH_AUTH_SOCK" /tmp/ssh-agent-$USER-screen
elif [[ -f "$_ssh_env_cache" ]]; then
# Source SSH settings, if applicable
. $_ssh_env_cache > /dev/null
ps x | grep ssh-agent | grep -v "grep " | grep -q $SSH_AGENT_PID || {
_start_agent
}
else
_start_agent
fi
# tidy up after ourselves
unset _agent_forwarding _ssh_env_cache
unfunction _start_agent
unfunction _clear_agent
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment