krbroot: Support non-default instances
[user/alex/software/my-snippets.git] / krbroot
1 #!/bin/sh
2
3 usage="Usage: $0 [-i instance] [-p principal] [-a addrend] subcommand [args]"
4
5 principal="$ATHENA_USER/root@ATHENA.MIT.EDU"
6 addrend="root"
7 while getopts "i:p:a:h" options; do
8     case $options in
9         i ) addrend="$OPTARG"; principal="$ATHENA_USER/$OPTARG@ATHENA.MIT.EDU";;
10         p ) principal="$OPTARG";;
11         a ) addrend="$OPTARG";;
12         h ) echo "$usage"; exit 0;;
13         \? ) echo "$usage"; exit 1;;
14         * ) echo "$usage"; exit 1;;
15     esac
16 done
17 shift `expr $OPTIND - 1 || :`
18
19 export KRB5CCNAME="/tmp/krb5cc_$(id -u).$addrend"
20 export KRBTKFILE=/dev/null
21
22 init () {
23     kinit -F -5 -l15m "$principal" "$@"
24 }
25
26 case $1 in
27     init)
28         shift;
29         exec kinit -F -5 -l15m "$principal" "$@"
30         ;;
31     destroy)
32         exec kdestroy -5
33         ;;
34     shell)
35         klist -s || init || exit 1;
36         HOST="`hostname` (krb:$addrend)" pagsh -c $SHELL
37         ;;
38     screen)
39         klist -s || init || exit 1;
40         HOST="`hostname` (krb:$addrend)" pagsh -c 'exec "$@"' exec "$@"
41         ;;
42     ssh)
43         klist -s || init || exit 1;
44         shift
45         exec ssh -k -l root "$@"
46         ;;
47     rlogin)
48         klist -s || init || exit 1;
49         exec rlogin -x -l root $2
50         ;;
51     *)
52         if [ $# = 0 ]; then
53             echo "Usage: $0 init" >&2
54             echo "       $0 destroy" >&2
55             echo "       $0 shell" >&2
56             echo "       $0 ssh [args]" >&2
57             echo "       $0 rlogin [args]" >&2
58             echo "       $0 [cmd]" >&2
59         else
60             exec "$@"
61         fi
62         ;;
63 esac