X-Git-Url: http://git.onelab.eu/?p=pl_sshd.git;a=blobdiff_plain;f=pl_sshd;fp=pl_sshd;h=8fb92e1caf8311841d56f494992f45a6aa4009f2;hp=0000000000000000000000000000000000000000;hb=a7813d33924a3e557c6347d81f005c5002dcb269;hpb=8a59994861a17eb92c11553d88631757ee8e63c3 diff --git a/pl_sshd b/pl_sshd new file mode 100644 index 0000000..8fb92e1 --- /dev/null +++ b/pl_sshd @@ -0,0 +1,133 @@ +#!/bin/bash +# +# Init file for PlanetLab OpenSSH server daemon (copied from standard +# sshd init file, minor modifications made). +# +# chkconfig: 2345 55 25 +# description: PlanetLab OpenSSH server daemon +# +# processname: sshd +# config: /etc/ssh/ssh_host_key +# config: /etc/ssh/ssh_host_key.pub +# config: /etc/ssh/ssh_random_seed +# config: /etc/ssh/sshd_config +# pidfile: /var/run/pl_sshd.pid + +# source function library +. /etc/rc.d/init.d/functions +# +# pull in sysconfig settings +[ -f /etc/sysconfig/pl_sshd ] && . /etc/sysconfig/pl_sshd + +# add the PlanetLab-specific options +KEYDIR=/var/pl_sshd/keys +OPTIONS="-p 806 -o 'AuthorizedKeysFile $KEYDIR/%u/authorized_keys'" +AUTOMOUNT=/usr/sbin/automount +AUTOMAP=/etc/auto.pl_sshd +AUTOPID= + +RETVAL=0 +prog="pl_sshd" + +# Some functions to make the below more readable +SSHD=/usr/sbin/sshd +RSA1_KEY=/var/local/etc/ssh_host_key +RSA_KEY=/var/local/etc/ssh_host_rsa_key +DSA_KEY=/var/local/etc/ssh_host_dsa_key +PID_FILE=/var/run/pl_sshd.pid + +do_restart_sanity_check() +{ + $SSHD -t + RETVAL=$? + if [ ! "$RETVAL" = 0 ]; then + failure $"Configuration file or keys are invalid" + echo + fi +} + +check_automount() +{ + # get pid for our automount process + AUTOPID=`mount | \ + sed -ne "s%^automount(pid\([0-9]*\)) on $KEYDIR type autofs.*%\1%p"` + + # check if that process is still alive + { [ -n "$AUTOPID" ] && ps -p $AUTOPID >/dev/null 2>&1; } || return 1 + + # check if we can actually mount a user dir in the automount dir + [ -d "$KEYDIR/root" ] || return 1 +} + +start() +{ + # make sure the key dir exists and automount is working on it + [ -d "$KEYDIR" ] || mkdir -p $KEYDIR + [ -x "$AUTOMAP" ] || + { echo "$AUTOMAP not executable"; return 1; } + check_automount || $AUTOMOUNT $KEYDIR program $AUTOMAP + + echo -n $"Starting $prog:" + initlog -c "$SSHD $OPTIONS" && success || failure + RETVAL=$? + [ "$RETVAL" = 0 ] && touch /var/lock/subsys/pl_sshd + echo +} + +stop() +{ + check_automount && kill -USR2 $AUTOPID + + #echo -n $"Stopping $prog:" + #killproc $SSHD -TERM + echo 'you need to kill the port 806 sshd(s) manually' + echo 'make sure not to kill the port 22 sshd...' + RETVAL=$? + [ "$RETVAL" = 0 ] && rm -f /var/lock/subsys/pl_sshd + #echo +} + +reload() +{ + echo -n $"Reloading $prog:" + killproc $SSHD -HUP + RETVAL=$? + echo +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart) + stop + start + ;; + reload) + reload + ;; + condrestart) + if [ -f /var/lock/subsys/pl_sshd ] ; then + do_restart_sanity_check + if [ "$RETVAL" = 0 ] ; then + stop + # avoid race + sleep 3 + start + fi + fi + ;; + status) + check_automount && echo automount running || + echo automount not functioning + status pl_sshd + RETVAL=$? + ;; + *) + echo $"Usage: $0 {start|stop|restart|reload|condrestart|status}" + RETVAL=1 +esac +exit $RETVAL