]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - etc/rc.d/sshd
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / etc / rc.d / sshd
1 #!/bin/sh
2 #
3 # $FreeBSD$
4 #
5
6 # PROVIDE: sshd
7 # REQUIRE: LOGIN FILESYSTEMS
8 # KEYWORD: shutdown
9
10 . /etc/rc.subr
11
12 name="sshd"
13 rcvar="sshd_enable"
14 command="/usr/sbin/${name}"
15 keygen_cmd="sshd_keygen"
16 start_precmd="sshd_precmd"
17 reload_precmd="sshd_configtest"
18 restart_precmd="sshd_configtest"
19 configtest_cmd="sshd_configtest"
20 pidfile="/var/run/${name}.pid"
21 extra_commands="configtest keygen reload"
22
23 : ${sshd_rsa1_enable:="yes"}
24 : ${sshd_rsa_enable:="yes"}
25 : ${sshd_dsa_enable:="yes"}
26 : ${sshd_ecdsa_enable:="yes"}
27
28 sshd_keygen_alg()
29 {
30         local alg=$1
31         local ALG="$(echo $alg | tr a-z A-Z)"
32         local keyfile
33
34         if ! checkyesno "sshd_${alg}_enable" ; then
35                 return 0
36         fi
37
38         case $alg in
39         rsa1)
40                 keyfile="/etc/ssh/ssh_host_key"
41                 ;;
42         rsa|dsa|ecdsa)
43                 keyfile="/etc/ssh/ssh_host_${alg}_key"
44                 ;;
45         *)
46                 return 1
47                 ;;
48         esac
49
50         if [ ! -x /usr/bin/ssh-keygen ] ; then
51                 warn "/usr/bin/ssh-keygen does not exist."
52                 return 1
53         fi
54
55         if [ -f "${keyfile}" ] ; then
56                 info "$ALG host key exists."
57         else
58                 echo "Generating $ALG host key."
59                 /usr/bin/ssh-keygen -q -t $alg -f "$keyfile" -N ""
60                 /usr/bin/ssh-keygen -l -f "$keyfile.pub"
61         fi
62 }
63
64 sshd_keygen()
65 {
66         sshd_keygen_alg rsa1
67         sshd_keygen_alg rsa
68         sshd_keygen_alg dsa
69         sshd_keygen_alg ecdsa
70 }
71
72 sshd_configtest()
73 {
74         echo "Performing sanity check on ${name} configuration."
75         eval ${command} ${sshd_flags} -t
76 }
77
78 sshd_precmd()
79 {
80         run_rc_command keygen
81         run_rc_command configtest
82 }
83
84 load_rc_config $name
85 run_rc_command "$1"