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 21 RETVAL=0 22 prog="sshd" 23 24 # Some functions to make the below more readable 25 KEYGEN=/usr/bin/ssh-keygen 26 SSHD=/usr/sbin/sshd 27 RSA1_KEY=/etc/ssh/ssh_host_key 28 RSA_KEY=/etc/ssh/ssh_host_rsa_key 29 DSA_KEY=/etc/ssh/ssh_host_dsa_key 30 PID_FILE=/var/run/sshd.pid 31 32 do_rsa1_keygen() { 33 if [ ! -s $RSA1_KEY ]; then 34 echo -n $"Generating SSH1 RSA host key: " 35 if $KEYGEN -q -t rsa1 -f $RSA1_KEY -C '' -N '' >&/dev/null; then 36 chmod 600 $RSA1_KEY 37 chmod 644 $RSA1_KEY.pub 38 success $"RSA1 key generation" 39 echo 40 else 41 failure $"RSA1 key generation" 42 echo 43 exit 1 44 fi 45 fi 46 } 47 48 do_rsa_keygen() { 49 if [ ! -s $RSA_KEY ]; then 50 echo -n $"Generating SSH2 RSA host key: " 51 if $KEYGEN -q -t rsa -f $RSA_KEY -C '' -N '' >&/dev/null; then 52 chmod 600 $RSA_KEY 53 chmod 644 $RSA_KEY.pub 54 success $"RSA key generation" 55 echo 56 else 57 failure $"RSA key generation" 58 echo 59 exit 1 60 fi 61 fi 62 } 63 64 do_dsa_keygen() { 65 if [ ! -s $DSA_KEY ]; then 66 echo -n $"Generating SSH2 DSA host key: " 67 if $KEYGEN -q -t dsa -f $DSA_KEY -C '' -N '' >&/dev/null; then 68 chmod 600 $DSA_KEY 69 chmod 644 $DSA_KEY.pub 70 success $"DSA key generation" 71 echo 72 else 73 failure $"DSA key generation" 74 echo 75 exit 1 76 fi 77 fi 78 } 79 80 do_restart_sanity_check() 81 { 82 $SSHD -t 83 RETVAL=$? 84 if [ ! "$RETVAL" = 0 ]; then 85 failure $"Configuration file or keys are invalid" 86 echo 87 fi 88 } 89 90 start() 91 { 92 # Create keys if necessary 93 do_rsa1_keygen 94 do_rsa_keygen 95 do_dsa_keygen 96 97 echo -n $"Starting $prog:" 98 initlog -c "$SSHD $OPTIONS" && success || failure 99 RETVAL=$? 100 [ "$RETVAL" = 0 ] && touch /var/lock/subsys/sshd 101 echo 102 } 103 104 stop() 105 { 106 echo -n $"Stopping $prog:" 107 killproc $SSHD -TERM 108 RETVAL=$? 109 [ "$RETVAL" = 0 ] && rm -f /var/lock/subsys/sshd 110 echo 111 } 112 113 reload() 114 { 115 echo -n $"Reloading $prog:" 116 killproc $SSHD -HUP 117 RETVAL=$? 118 echo 119 } 120 121 case "$1" in 122 start) 123 start 124 ;; 125 stop) 126 stop 127 ;; 128 restart) 129 stop 130 start 131 ;; 132 reload) 133 reload 134 ;; 135 condrestart) 136 if [ -f /var/lock/subsys/sshd ] ; then 137 do_restart_sanity_check 138 if [ "$RETVAL" = 0 ] ; then 139 stop 140 # avoid race 141 sleep 3 142 start 143 fi 144 fi 145 ;; 146 status) 147 status $SSHD 148 RETVAL=$? 149 ;; 150 *) 151 echo $"Usage: $0 {start|stop|restart|reload|condrestart|status}" 152 RETVAL=1 153 esac 154 exit $RETVAL