weiß nicht
This commit is contained in:
parent
dbb0fdc94f
commit
d6ba30980a
1 changed files with 166 additions and 0 deletions
166
bin/ssh-startagent
Executable file
166
bin/ssh-startagent
Executable file
|
@ -0,0 +1,166 @@
|
|||
#!/bin/bash
|
||||
|
||||
FILELOGLEVEL=DEBUG
|
||||
. $(dirname $0)/../logging
|
||||
# loggerfactory
|
||||
LANG=C
|
||||
|
||||
ssh_runinagent () {
|
||||
# run ssh-* commands in wanted agent
|
||||
|
||||
if [ check_identity ]
|
||||
then
|
||||
local SSH_AUTH_SOCK
|
||||
local SSH_AGENT_PID
|
||||
local agentfile=$(get_agentfile)
|
||||
shift
|
||||
local sshcommand=${@}
|
||||
|
||||
logtrace "run command »$sshcommand« in agent $agentfile"
|
||||
if [ -e "$agentfile" ]; then
|
||||
. $agentfile
|
||||
fi
|
||||
logdebug "SSH_AUTH_SOCK: ${SSH_AUTH_SOCK:-x}"
|
||||
if [ "${SSH_AUTH_SOCK:-x}" = "x" ]
|
||||
then
|
||||
start_or_restart_agent
|
||||
. $agentfile
|
||||
fi
|
||||
$sshcommand
|
||||
ret=$?
|
||||
fi
|
||||
}
|
||||
|
||||
check_identity () {
|
||||
# is ssh-identity existing?
|
||||
if [ -e ${SSH_IDENTITIES_DIR}/${ssh_identity} ]
|
||||
then
|
||||
return 0
|
||||
else
|
||||
logerr "Identity ${ssh_identity} is not definded. Create identity-directory ${SSH_IDENTITIES_DIR}/${ssh_identity}"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
get_agentfilename () {
|
||||
printf "%s" "${SSH_AGENTS_DIR}/agent-${ssh_identity}"
|
||||
}
|
||||
get_agentsocketname () {
|
||||
printf "%s" "${SSH_AGENT_SOCKETS_DIR}/socket-${ssh_identity}"
|
||||
}
|
||||
|
||||
start_or_restart_agent () {
|
||||
if check_identity
|
||||
then
|
||||
check_agent
|
||||
ret=$?
|
||||
logdebug "check_agent returncode $ret"
|
||||
case $ret in
|
||||
0)
|
||||
logdebug "agent is running"
|
||||
ret=0
|
||||
;;
|
||||
1)
|
||||
logdebug "agent is running, but:"
|
||||
ret=1
|
||||
;;
|
||||
2)
|
||||
logdebug "former agent is not running -> start it"
|
||||
logdebug "SSH_AGENT_OPTIONS: $SSH_AGENT_OPTIONS"
|
||||
startagent=true
|
||||
;;
|
||||
3)
|
||||
logwarning "Agent is not ok"
|
||||
startagent=true
|
||||
;;
|
||||
*)
|
||||
logwarning "Something else with agent"
|
||||
ret=99
|
||||
;;
|
||||
esac
|
||||
if ${startagent:-false}
|
||||
then
|
||||
ssh-agent -a $(get_agentsocketname) ${SSH_AGENT_OPTIONS} > $(get_agentfilename)
|
||||
ret=$?
|
||||
fi
|
||||
ssh_runinagent ${ssh_identity} ssh-add -l >/dev/null 2>&1
|
||||
if [ $? -eq 0 ]
|
||||
then
|
||||
printf "%s\n" "$(get_agentfilename)"
|
||||
else
|
||||
ret=92
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
check_agent () {
|
||||
if [ -e $(get_agentsocketname) ]
|
||||
then
|
||||
ssh_runinagent ${ssh_identity} ssh-add -l >/dev/null 2>&1
|
||||
return $?
|
||||
fi
|
||||
logdebug "agent socketname: $(get_agentsocketname)"
|
||||
return 3
|
||||
}
|
||||
|
||||
get_agentfile () {
|
||||
if check_identity
|
||||
then
|
||||
printf "%s" "$(get_agentfilename)"
|
||||
fi
|
||||
}
|
||||
|
||||
get_agentsocket () {
|
||||
if check_identity
|
||||
then
|
||||
printf "%s" "$(get_agentsocketname)"
|
||||
fi
|
||||
}
|
||||
|
||||
agent_load_identity_keys () {
|
||||
|
||||
# If DISPLAY is set, ssh-add calls ssh-askpass, and if its in remote-terminal, it wont work
|
||||
# So remember and unset DISPLAY, and set it at the end again, if it was set before
|
||||
[ $DISPLAY ] && local DISPLAY_ORIG=$DISPLAY
|
||||
[ $DISPLAY ] && logtrace "unset DISPLAY: $DISPLAY"
|
||||
[ $DISPLAY ] && unset DISPLAY
|
||||
|
||||
|
||||
}
|
||||
|
||||
ssh_identity=${1:-default}
|
||||
identitydir=${SSH_IDENTITIES_DIR}/${ssh_identity}
|
||||
[ -z "${SSH_IDENTITIES_DIR+x}" ] && { export SSH_IDENTITIES_DIR="${SSH_IDENTITIES_DEFAULT_DIR-${HOME}/.ssh/identities}"; }
|
||||
[ -z "${SSH_AGENTS_DIR+x}" ] && { export SSH_AGENTS_DIR=${SSH_AGENTS_DEFAULT_DIR-~/.ssh/agents}; }
|
||||
[ -z "${SSH_AGENT_SOCKETS_DIR+x}" ] && { export SSH_AGENT_SOCKETS_DIR=${SSH_AGENT_SOCKETS_DEFAULT_DIR-~/.ssh/agents}; }
|
||||
[ -z "${SSH_AGENT_OPTIONS+x}" ] && { export SSH_AGENT_OPTIONS=${SSH_AGENT_DEFAULT_OPTIONS--t 7200 }; }
|
||||
|
||||
export SSH_IDENTITIES_DIR SSH_AGENTS_DIR SSH_AGENT_SOCKETS_DIR SSH_AGENT_OPTIONS
|
||||
|
||||
#logdebug "<< EOF
|
||||
# ssh identity: ${ssh_identity}
|
||||
# identidies dir: $SSH_IDENTITIES_DIR
|
||||
# agents dir: $SSH_AGENTS_DIR
|
||||
# agents sockets dir: $SSH_AGENT_SOCKETS_DIR
|
||||
# agents options: $SSH_AGENT_OPTIONS
|
||||
# agentfile: $(get_agentfile ${ssh_identity})
|
||||
# agentsocket: $(get_agentsocket ${ssh_identity})
|
||||
#EOF
|
||||
#"
|
||||
#logtrace "Keys in your shells agent ${SSH_AUTH_SOCK}: $(ssh-add -l)"
|
||||
logtrace "Keys in agent ${ssh_identity}: $(ssh_runinagent bmi ssh-add -l)"
|
||||
|
||||
|
||||
createonly=false
|
||||
|
||||
if [[ $SSH_TTY || $X2GO_SESSION ]] ; then
|
||||
logdebug "Shell running with forwarded ssh-agent. Please add local token manually"
|
||||
check_token
|
||||
res=1
|
||||
else
|
||||
logdebug "run with local ssh-agent"
|
||||
start_or_restart_agent
|
||||
! $createonly && agent_load_identity_keys $ssh_identity
|
||||
res=0
|
||||
fi
|
||||
#exit $res
|
Loading…
Reference in a new issue