]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - etc/rc.d/sshd
Fix reference count overflow in mqueuefs.
[FreeBSD/FreeBSD.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 desc="Secure Shell Daemon"
14 rcvar="sshd_enable"
15 command="/usr/sbin/${name}"
16 keygen_cmd="sshd_keygen"
17 start_precmd="sshd_precmd"
18 reload_precmd="sshd_configtest"
19 restart_precmd="sshd_configtest"
20 configtest_cmd="sshd_configtest"
21 pidfile="/var/run/${name}.pid"
22 extra_commands="configtest keygen reload"
23
24 : ${sshd_rsa1_enable:="no"}
25 : ${sshd_rsa_enable:="yes"}
26 : ${sshd_dsa_enable:="no"}
27 : ${sshd_ecdsa_enable:="yes"}
28 : ${sshd_ed25519_enable:="yes"}
29
30 sshd_keygen_alg()
31 {
32         local alg=$1
33         local ALG="$(echo $alg | tr a-z A-Z)"
34         local keyfile
35
36         if ! checkyesno "sshd_${alg}_enable" ; then
37                 return 0
38         fi
39
40         case $alg in
41         rsa1)
42                 keyfile="/etc/ssh/ssh_host_key"
43                 ;;
44         rsa|dsa|ecdsa|ed25519)
45                 keyfile="/etc/ssh/ssh_host_${alg}_key"
46                 ;;
47         *)
48                 return 1
49                 ;;
50         esac
51
52         if [ ! -x /usr/bin/ssh-keygen ] ; then
53                 warn "/usr/bin/ssh-keygen does not exist."
54                 return 1
55         fi
56
57         if [ -f "${keyfile}" ] ; then
58                 info "$ALG host key exists."
59         else
60                 echo "Generating $ALG host key."
61                 /usr/bin/ssh-keygen -q -t $alg -f "$keyfile" -N ""
62                 /usr/bin/ssh-keygen -l -f "$keyfile.pub"
63         fi
64 }
65
66 sshd_keygen()
67 {
68         sshd_keygen_alg rsa1
69         sshd_keygen_alg rsa
70         sshd_keygen_alg dsa
71         sshd_keygen_alg ecdsa
72         sshd_keygen_alg ed25519
73 }
74
75 sshd_configtest()
76 {
77         echo "Performing sanity check on ${name} configuration."
78         eval ${command} ${sshd_flags} -t
79 }
80
81 sshd_precmd()
82 {
83         run_rc_command keygen
84         run_rc_command configtest
85 }
86
87 load_rc_config $name
88 run_rc_command "$1"