#!/bin/bash # lifetime, in minutes lifetime=15 keysuffix=root hostopt="" [ -z "$hostopt" ] && hostopt="${HOSTNAME}" [ -z "$hostopt" ] && hostopt=`uname -n 2>/dev/null || echo unknown` while getopts "H:k:l:" opt; do case "$opt" in H) hostopt="$OPTARG";; k) keysuffix="$OPTARG";; l) lifetime="$OPTARG";; \?) die "$0 [-H hostname] [-k keysuffix] [-l lifetime]" esac done shift $(($OPTIND - 1)) keys="$HOME/.ssh/id_rsa_$keysuffix" keychain_host="$hostopt-$keysuffix" function with-keys { unset SSH_AUTH_SOCK SSH_AGENT_PID eval $(keychain --timeout "$lifetime" --eval --host "$keychain_host" $keys) export SSHROOT=1 exec "$@" } function with-agent { unset SSH_AUTH_SOCK SSH_AGENT_PID eval $(keychain --timeout "$lifetime" --eval --host "$keychain_host") export SSHROOT=1 echo with-agent: Running: "$@" exec "$@" } command="$1" shift case "$command" in init) echo "Loading default keys (lifetime $lifetime)..." with-agent ssh-add -t "${lifetime}m" "$@" $keys ;; add) echo "Loading keys (lifetime $lifetime):" "$@" with-agent ssh-add -t "${lifetime}m" "$@" ;; list) with-agent ssh-add -l ;; destroy) with-agent ssh-add -D ;; shell) with-keys "$SHELL" "$@" ;; ssh) #with-keys ssh -l root "$@" with-keys ssh "$@" ;; *) if [ -z "$command" ]; then echo "Usage: $0 init" >&2 echo " $0 add" >&2 echo " $0 list" >&2 echo " $0 destroy" >&2 echo " $0 shell" >&2 echo " $0 ssh [args]" >&2 echo " $0 [cmd]" >&2 else echo Executing: "$command" "$@" with-agent "$command" "$@" fi ;; esac