Skip to content

Instantly share code, notes, and snippets.

@aya-eiya
Created May 16, 2013 08:11
Show Gist options
  • Save aya-eiya/5590189 to your computer and use it in GitHub Desktop.
Save aya-eiya/5590189 to your computer and use it in GitHub Desktop.
GitHubのパスフレーズを省略するコードをconfig置いても大丈夫にした ref: http://qiita.com/items/67b0fdf80aa7b568d28e
#! /bin/bash
SSH_CONFIG="$HOME/.ssh/config"
SSH_ENV="$HOME/.ssh/environment"
# start the ssh-agent
function start_agent {
echo "Initializing new SSH agent..."
# spawn ssh-agent
ssh-agent | sed 's/^echo/#echo/' > "$SSH_ENV"
echo succeeded
chmod 600 "$SSH_ENV"
. "$SSH_ENV" > /dev/null
add_key
if [ $? -ne 0 ]; then
echo "[Error] Fail to add_key..."
stop_agent
return 1
fi
}
function stop_agent {
ps -f -u $USERNAME | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
if [ $? -ne 0 ]; then
return 1
fi
echo "Stop Agent..."
echo "PID:$SSH_AGENT_PID"
rm $SSH_ENV
kill $SSH_AGENT_PID
SSH_AGENT_PID=
return 0
}
function add_key {
echo "Adding keys."
local ssh_add_cmd=""
if [ -f "$SSH_CONFIG" ]; then
echo "Search config"
ssh_add_cmd=`cat $SSH_CONFIG |
grep "IdentityFile" |
sed -e "s/IdentityFile/ssh-add/g ;
s/[ ]\+/ /g ;
s/ ~/ ${HOME//\//\\/}/"`
fi
if [ "$ssh_add_cmd" = "" ]; then
echo "ssh-add with default keys."
ssh-add
if [ $? -ne 0 ]; then
return 1
fi
return 0
else
echo "config found. ssh-add with your setting keys."
$ssh_add_cmd
return 0
fi
return 1
}
# test for identities
function test_identities {
# test whether standard identities have been added to the agent already
ssh-add -l | grep "The agent has no identities" > /dev/null
if [ $? -eq 0 ]; then
add_key
# $SSH_AUTH_SOCK broken so we start a new proper agent
if [ $? -eq 2 ];then
start_agent
fi
fi
}
# check for running ssh-agent with proper $SSH_AGENT_PID
if [ -n "$SSH_AGENT_PID" ]; then
ps -f -u $USERNAME | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
if [ $? -eq 0 ]; then
test_identities
fi
# if $SSH_AGENT_PID is not properly set, we might be able to load one from
# $SSH_ENV
else
if [ -f "$SSH_ENV" ]; then
. "$SSH_ENV" > /dev/null
fi
ps -f -u $USERNAME | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
if [ $? -eq 0 ]; then
test_identities
else
start_agent
fi
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment