167761Smsmith#!/bin/sh
267761Smsmith#
367761Smsmith# $FreeBSD: releng/10.2/etc/rc.d/sshd 262566 2014-02-27 17:29:02Z des $
467761Smsmith#
567761Smsmith
667761Smsmith# PROVIDE: sshd
767761Smsmith# REQUIRE: LOGIN FILESYSTEMS
867761Smsmith# KEYWORD: shutdown
967761Smsmith
1067761Smsmith. /etc/rc.subr
1167761Smsmith
1267761Smsmithname="sshd"
1367761Smsmithrcvar="sshd_enable"
1467761Smsmithcommand="/usr/sbin/${name}"
1567761Smsmithkeygen_cmd="sshd_keygen"
1667761Smsmithstart_precmd="sshd_precmd"
1767761Smsmithreload_precmd="sshd_configtest"
1867761Smsmithrestart_precmd="sshd_configtest"
1967761Smsmithconfigtest_cmd="sshd_configtest"
2067761Smsmithpidfile="/var/run/${name}.pid"
2167761Smsmithextra_commands="configtest keygen reload"
2267761Smsmith
2367761Smsmith: ${sshd_rsa1_enable:="yes"}
2467761Smsmith: ${sshd_rsa_enable:="yes"}
2567761Smsmith: ${sshd_dsa_enable:="yes"}
2667761Smsmith: ${sshd_ecdsa_enable:="yes"}
2767761Smsmith: ${sshd_ed25519_enable:="yes"}
2867761Smsmith
2967761Smsmithsshd_keygen_alg()
3069744Smsmith{
3169744Smsmith	local alg=$1
3269744Smsmith	local ALG="$(echo $alg | tr a-z A-Z)"
3367761Smsmith	local keyfile
3467761Smsmith
3567761Smsmith	if ! checkyesno "sshd_${alg}_enable" ; then
3667761Smsmith		return 0
3778662Siwasaki	fi
3878662Siwasaki
3978662Siwasaki	case $alg in
4078662Siwasaki	rsa1)
4178662Siwasaki		keyfile="/etc/ssh/ssh_host_key"
4278662Siwasaki		;;
4378662Siwasaki	rsa|dsa|ecdsa|ed25519)
4478662Siwasaki		keyfile="/etc/ssh/ssh_host_${alg}_key"
4578662Siwasaki		;;
4678662Siwasaki	*)
4778662Siwasaki		return 1
4878662Siwasaki		;;
4978662Siwasaki	esac
5078662Siwasaki
5170271Stakawata	if [ ! -x /usr/bin/ssh-keygen ] ; then
5270271Stakawata		warn "/usr/bin/ssh-keygen does not exist."
5370271Stakawata		return 1
5470271Stakawata	fi
55101560Siwasaki
5670271Stakawata	if [ -f "${keyfile}" ] ; then
5770271Stakawata		info "$ALG host key exists."
5870271Stakawata	else
5970271Stakawata		echo "Generating $ALG host key."
6070271Stakawata		/usr/bin/ssh-keygen -q -t $alg -f "$keyfile" -N ""
6170271Stakawata		/usr/bin/ssh-keygen -l -f "$keyfile.pub"
6270271Stakawata	fi
6370271Stakawata}
6470271Stakawata
6570271Stakawatasshd_keygen()
6670271Stakawata{
6770271Stakawata	sshd_keygen_alg rsa1
6870271Stakawata	sshd_keygen_alg rsa
6970271Stakawata	sshd_keygen_alg dsa
7070271Stakawata	sshd_keygen_alg ecdsa
7170271Stakawata	sshd_keygen_alg ed25519
7270271Stakawata}
7370271Stakawata
7470271Stakawatasshd_configtest()
7578662Siwasaki{
7678662Siwasaki	echo "Performing sanity check on ${name} configuration."
7778662Siwasaki	eval ${command} ${sshd_flags} -t
7878662Siwasaki}
7978662Siwasaki
8078662Siwasakisshd_precmd()
8178662Siwasaki{
8278662Siwasaki	run_rc_command keygen
8378662Siwasaki	run_rc_command configtest
8478662Siwasaki}
8578662Siwasaki
8678662Siwasakiload_rc_config $name
8778662Siwasakirun_rc_command "$1"
8878662Siwasaki