Created
December 30, 2016 03:48
-
-
Save qntmpkts/e19feee49a296f1498d1b0e8d0d15a29 to your computer and use it in GitHub Desktop.
ssh-agent oh-my-zsh plugin for termux
This file contains 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
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