sshd revision 303770
1#!/bin/sh
2#
3# $FreeBSD: stable/11/etc/rc.d/sshd 303770 2016-08-05 15:32:35Z des $
4#
5
6# PROVIDE: sshd
7# REQUIRE: LOGIN FILESYSTEMS
8# KEYWORD: shutdown
9
10. /etc/rc.subr
11
12name="sshd"
13desc="Secure Shell Daemon"
14rcvar="sshd_enable"
15command="/usr/sbin/${name}"
16keygen_cmd="sshd_keygen"
17start_precmd="sshd_precmd"
18reload_precmd="sshd_configtest"
19restart_precmd="sshd_configtest"
20configtest_cmd="sshd_configtest"
21pidfile="/var/run/${name}.pid"
22extra_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
30sshd_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
66sshd_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
75sshd_configtest()
76{
77	echo "Performing sanity check on ${name} configuration."
78	eval ${command} ${sshd_flags} -t
79}
80
81sshd_precmd()
82{
83	run_rc_command keygen
84	run_rc_command configtest
85}
86
87load_rc_config $name
88run_rc_command "$1"
89