1#!/bin/bash
2#
3# Init file for OpenSSH server daemon
4#
5# chkconfig: 2345 55 25
6# description: OpenSSH server daemon
7#
8# processname: sshd
9# config: /etc/ssh/ssh_host_key
10# config: /etc/ssh/ssh_host_key.pub
11# config: /etc/ssh/ssh_random_seed
12# config: /etc/ssh/sshd_config
13# pidfile: /var/run/sshd.pid
14
15# source function library
16. /etc/rc.d/init.d/functions
17
18# pull in sysconfig settings
19[ -f /etc/sysconfig/sshd ] && . /etc/sysconfig/sshd
20
21RETVAL=0
22prog="sshd"
23
24# Some functions to make the below more readable
25KEYGEN=/usr/bin/ssh-keygen
26SSHD=/usr/sbin/sshd
27RSA1_KEY=/etc/ssh/ssh_host_key
28RSA_KEY=/etc/ssh/ssh_host_rsa_key
29DSA_KEY=/etc/ssh/ssh_host_dsa_key
30PID_FILE=/var/run/sshd.pid
31
32my_success() {
33  local msg
34  if [ $# -gt 1 ]; then
35    msg="$2"
36  else
37    msg="done"
38  fi
39  case "`type -type success`" in
40    function)
41      success "$1"
42    ;;
43    *)
44      echo -n "${msg}"
45    ;;
46  esac
47}
48my_failure() {
49  local msg
50  if [ $# -gt 1 ]; then
51    msg="$2"
52  else
53    msg="FAILED"
54  fi
55  case "`type -type failure`" in
56    function)
57      failure "$1"
58    ;;
59    *)
60      echo -n "${msg}"
61    ;;
62  esac
63}
64do_rsa1_keygen() {
65	if [ ! -s $RSA1_KEY ]; then
66		echo -n "Generating SSH1 RSA host key: "
67		if $KEYGEN -q -t rsa1 -f $RSA1_KEY -C '' -N '' >&/dev/null; then
68			chmod 600 $RSA1_KEY
69			chmod 644 $RSA1_KEY.pub
70			my_success "RSA1 key generation"
71			echo
72		else
73			my_failure "RSA1 key generation"
74			echo
75			exit 1
76		fi
77	fi
78}
79do_rsa_keygen() {
80	if [ ! -s $RSA_KEY ]; then
81		echo -n "Generating SSH2 RSA host key: "
82		if $KEYGEN -q -t rsa -f $RSA_KEY -C '' -N '' >&/dev/null; then
83			chmod 600 $RSA_KEY
84			chmod 644 $RSA_KEY.pub
85			my_success "RSA key generation"
86			echo
87		else
88			my_failure "RSA key generation"
89			echo
90			exit 1
91		fi
92	fi
93}
94do_dsa_keygen() {
95	if [ ! -s $DSA_KEY ]; then
96		echo -n "Generating SSH2 DSA host key: "
97		if $KEYGEN -q -t dsa -f $DSA_KEY -C '' -N '' >&/dev/null; then
98			chmod 600 $DSA_KEY
99			chmod 644 $DSA_KEY.pub
100			my_success "DSA key generation"
101			echo
102		else
103			my_failure "DSA key generation"
104			echo
105			exit 1
106		fi
107	fi
108}
109do_restart_sanity_check() {
110	$SSHD -t
111	RETVAL=$?
112	if [ ! "$RETVAL" = 0 ]; then
113		my_failure "Configuration file or keys"
114		echo
115	fi
116}
117
118
119case "$1" in
120	start)
121		# Create keys if necessary
122		do_rsa1_keygen;
123		do_rsa_keygen;
124		do_dsa_keygen;
125		
126		echo -n "Starting sshd: "
127		if [ ! -f $PID_FILE ] ; then
128			sshd $OPTIONS
129			RETVAL=$?
130			if [ "$RETVAL" = "0" ] ; then
131				my_success "sshd startup" "sshd"
132				touch /var/lock/subsys/sshd
133			else
134				my_failure "sshd startup" ""
135			fi
136		fi
137		echo
138		;;
139	stop)
140		echo -n "Shutting down sshd: "
141		if [ -f $PID_FILE ] ; then
142			killproc sshd
143			RETVAL=$?
144			[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/sshd
145		fi
146		echo
147		;;
148	restart)
149		do_restart_sanity_check
150		$0 stop
151		$0 start
152		RETVAL=$?
153		;;
154	condrestart)
155		if [ -f /var/lock/subsys/sshd ] ; then
156			do_restart_sanity_check
157			$0 stop
158			$0 start
159			RETVAL=$?
160		fi
161		;;
162	status)
163		status sshd
164		RETVAL=$?
165		;;
166	*)
167		echo "Usage: sshd {start|stop|restart|status|condrestart}"
168		exit 1
169		;;
170esac
171
172exit $RETVAL
173