Created
March 10, 2015 07:35
-
-
Save royingantaginting/628aff8b5af43101e8e5 to your computer and use it in GitHub Desktop.
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
# Copyright (C) 2011 by Wayne Walker <[email protected]> | |
# | |
# Released under one of the versions of the MIT License. | |
# | |
# See LICENSE for details | |
_LIVE_AGENT_LIST="" | |
_SSH_ENV="$HOME/.ssh/environment" | |
_debug_print() { | |
if [[ $_DEBUG -gt 0 ]] | |
then | |
printf "%s\n" $1 | |
fi | |
} | |
find_all_ssh_agent_sockets() { | |
_SSH_AGENT_SOCKETS=`find /tmp/ -type s -name agent.\* 2> /dev/null | grep '/tmp/ssh-.*/agent.*'` | |
_debug_print "$_SSH_AGENT_SOCKETS" | |
} | |
find_all_gpg_agent_sockets() { | |
_GPG_AGENT_SOCKETS=`find /tmp/ -type s -name S.gpg-agent.ssh 2> /dev/null | grep '/tmp/gpg-.*/S.gpg-agent.ssh'` | |
_debug_print "$_GPG_AGENT_SOCKETS" | |
} | |
find_all_gnome_keyring_agent_sockets() { | |
_GNOME_KEYRING_AGENT_SOCKETS=`find /tmp/ -type s -name ssh 2> /dev/null | grep '/tmp/keyring-.*/ssh$'` | |
_debug_print "$_GNOME_KEYRING_AGENT_SOCKETS" | |
} | |
find_all_osx_keychain_agent_sockets() { | |
[[ -n "$TMPDIR" ]] || TMPDIR=/tmp | |
_OSX_KEYCHAIN_AGENT_SOCKETS=`find $TMPDIR/ -type s -regex '.*/ssh-.*/agent..*$' 2> /dev/null` | |
_debug_print "$_OSX_KEYCHAIN_AGENT_SOCKETS" | |
} | |
test_agent_socket() { | |
local SOCKET=$1 | |
SSH_AUTH_SOCK=$SOCKET ssh-add -l 2> /dev/null > /dev/null | |
result=$? | |
_debug_print $result | |
if [[ $result -eq 0 ]] | |
then | |
# contactible and has keys loaded | |
_KEY_COUNT=`SSH_AUTH_SOCK=$SOCKET ssh-add -l | wc -l | tr -d ' '` | |
fi | |
if [[ $result -eq 1 ]] | |
then | |
# contactible butno keys loaded | |
_KEY_COUNT=0 | |
fi | |
if [[ ( ( $result -eq 0 ) || ( $result -eq 1 ) ) ]] | |
then | |
if [[ -n "$_LIVE_AGENT_LIST" ]] | |
then | |
_LIVE_AGENT_LIST="${_LIVE_AGENT_LIST} ${SOCKET}:$_KEY_COUNT" | |
else | |
_LIVE_AGENT_LIST="${SOCKET}:$_KEY_COUNT" | |
fi | |
return 0 | |
fi | |
return 1 | |
} | |
find_live_gnome_keyring_agents() { | |
for i in $_GNOME_KEYRING_AGENT_SOCKETS | |
do | |
test_agent_socket $i | |
done | |
} | |
find_live_osx_keychain_agents() { | |
for i in $_OSX_KEYCHAIN_AGENT_SOCKETS | |
do | |
test_agent_socket $i | |
done | |
} | |
find_live_gpg_agents() { | |
for i in $_GPG_AGENT_SOCKETS | |
do | |
test_agent_socket $i | |
done | |
} | |
find_live_ssh_agents() { | |
for i in $_SSH_AGENT_SOCKETS | |
do | |
test_agent_socket $i | |
done | |
} | |
find_all_agent_sockets() { | |
_LIVE_AGENT_LIST= | |
find_all_ssh_agent_sockets | |
find_all_gpg_agent_sockets | |
find_all_gnome_keyring_agent_sockets | |
find_all_osx_keychain_agent_sockets | |
find_live_ssh_agents | |
find_live_gpg_agents | |
find_live_gnome_keyring_agents | |
find_live_osx_keychain_agents | |
_debug_print "$_LIVE_AGENT_LIST" | |
printf "%s\n" "$_LIVE_AGENT_LIST" | sed -e 's/ /\n/g' | sort -n -t: -k 2 -k 1 | |
} | |
set_ssh_agent_socket() { | |
export SSH_AUTH_SOCK=$(find_all_agent_sockets|tail -n 1|awk -F: '{print $1}') | |
} | |
start_ssh_agent() { | |
echo "Initialising new SSH agent..." | |
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${_SSH_ENV}" | |
echo succeeded | |
chmod 600 "${_SSH_ENV}" | |
. "${_SSH_ENV}" > /dev/null | |
/usr/bin/ssh-add; | |
} | |
if [ -f "${_SSH_ENV}" ]; then | |
. "${_SSH_ENV}" > /dev/null | |
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || { | |
start_ssh_agent; | |
} | |
else | |
start_ssh_agent; | |
fi | |
set_ssh_agent_socket |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment