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