summaryrefslogtreecommitdiffstats
path: root/etc/rc.d/sshd
blob: 9f747164f88de4101e60a31d674bb9a9a36c206b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#!/bin/sh
#
# $FreeBSD$
#

# PROVIDE: sshd
# REQUIRE: LOGIN FILESYSTEMS
# KEYWORD: shutdown

. /etc/rc.subr

name="sshd"
rcvar="sshd_enable"
command="/usr/sbin/${name}"
keygen_cmd="sshd_keygen"
start_precmd="sshd_precmd"
reload_precmd="sshd_configtest"
restart_precmd="sshd_configtest"
configtest_cmd="sshd_configtest"
pidfile="/var/run/${name}.pid"
extra_commands="configtest keygen reload"

: ${sshd_rsa1_enable:="yes"}
: ${sshd_rsa_enable:="yes"}
: ${sshd_dsa_enable:="yes"}
: ${sshd_ecdsa_enable:="yes"}
: ${sshd_ed25519_enable:="yes"}

sshd_keygen_alg()
{
	local alg=$1
	local ALG="$(echo $alg | tr a-z A-Z)"
	local keyfile

	if ! checkyesno "sshd_${alg}_enable" ; then
		return 0
	fi

	case $alg in
	rsa1)
		keyfile="/etc/ssh/ssh_host_key"
		;;
	rsa|dsa|ecdsa|ed25519)
		keyfile="/etc/ssh/ssh_host_${alg}_key"
		;;
	*)
		return 1
		;;
	esac

	if [ ! -x /usr/bin/ssh-keygen ] ; then
		warn "/usr/bin/ssh-keygen does not exist."
		return 1
	fi

	if [ -f "${keyfile}" ] ; then
		info "$ALG host key exists."
	else
		echo "Generating $ALG host key."
		/usr/bin/ssh-keygen -q -t $alg -f "$keyfile" -N ""
		/usr/bin/ssh-keygen -l -f "$keyfile.pub"
	fi
}

sshd_keygen()
{
	sshd_keygen_alg rsa1
	sshd_keygen_alg rsa
	sshd_keygen_alg dsa
	sshd_keygen_alg ecdsa
	sshd_keygen_alg ed25519
}

sshd_configtest()
{
	echo "Performing sanity check on ${name} configuration."
	eval ${command} ${sshd_flags} -t
}

sshd_precmd()
{
	run_rc_command keygen
	run_rc_command configtest
}

load_rc_config $name
run_rc_command "$1"
OpenPOWER on IntegriCloud