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