diff --git a/board/common/rootfs/etc/finit.d/available/sshd.conf b/board/common/rootfs/etc/finit.d/available/sshd.conf deleted file mode 100644 index 9b24cd05..00000000 --- a/board/common/rootfs/etc/finit.d/available/sshd.conf +++ /dev/null @@ -1,2 +0,0 @@ -task [S] /lib/infix/ssh-hostkeys -- -service [2345789] /usr/sbin/sshd -D -- OpenSSH daemon diff --git a/board/common/rootfs/lib/infix/ssh-hostkeys b/board/common/rootfs/lib/infix/ssh-hostkeys deleted file mode 100755 index bd1f5590..00000000 --- a/board/common/rootfs/lib/infix/ssh-hostkeys +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -for type in ecdsa ed25519 rsa; do - [ -f /var/lib/ssh/ssh_host_${type}_key ] \ - || ssh-keygen -N "" -t $type -f /var/lib/ssh/ssh_host_${type}_key \ - || exit 1 -done - -initctl cond set ssh-hostkeys diff --git a/package/skeleton-init-finit/skeleton/etc/finit.d/available/sshd.conf b/package/skeleton-init-finit/skeleton/etc/finit.d/available/sshd.conf index 1af2c8a9..a9859e1b 100644 --- a/package/skeleton-init-finit/skeleton/etc/finit.d/available/sshd.conf +++ b/package/skeleton-init-finit/skeleton/etc/finit.d/available/sshd.conf @@ -1,2 +1,4 @@ -task [S] /usr/bin/ssh-genhostkeys -- Verifying SSH host keys -service [2345789] env:-/etc/default/sshd /usr/sbin/sshd -D $SSHD_OPTS -- OpenSSH daemon +task \ + [S] /usr/bin/ssh-hostkeys -- Verifying SSH host keys +service env:-/etc/default/sshd \ + [2345789] /usr/sbin/sshd -D $SSHD_OPTS -- OpenSSH daemon diff --git a/package/skeleton-init-finit/skeleton/usr/bin/ssh-genhostkeys b/package/skeleton-init-finit/skeleton/usr/bin/ssh-genhostkeys deleted file mode 100755 index ca73075b..00000000 --- a/package/skeleton-init-finit/skeleton/usr/bin/ssh-genhostkeys +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/sh -tmp=$(mktemp) -dir=$(dirname $(grep -r '^HostKey' /etc/ssh/* |tail -1 | awk '{print $2}')) - -log() -{ - logger -sik -p security.notice -t sshd "$@" -} -warn() -{ - logger -sik -p security.warning -t sshd "$@" -} -err() -{ - logger -sik -p security.err -t sshd "$@" -} - -check() -{ - if sshd -t >$tmp 2>&1; then - log "SSH hostkeys OK, setting ssh-hostkeys condition" - initctl cond set ssh-hostkeys - return 0 - fi - return 1 -} - -rc=0 -if ! check; then - files=$(awk '/invalid format/{print $6}' "$tmp" | sed 's/.*"\(.*\)".*/\1/') - for file in $files; do - warn "Removing $file: invalid format" - rm "$file" - done - - log "Generating SSH hostkeys ..." - if ssh-keygen -A; then - mv /etc/ssh/ssh_host_* "$dir/" - fi - if ! check; then - err "Failed generating SSH hostkeys!" - rc=1 - fi -fi - -rm "$tmp" -exit $rc diff --git a/package/skeleton-init-finit/skeleton/usr/bin/ssh-hostkeys b/package/skeleton-init-finit/skeleton/usr/bin/ssh-hostkeys new file mode 100755 index 00000000..5207a0f5 --- /dev/null +++ b/package/skeleton-init-finit/skeleton/usr/bin/ssh-hostkeys @@ -0,0 +1,49 @@ +#!/bin/sh +tmp=$(mktemp) +dir=$(dirname "$(grep -r '^HostKey' /etc/ssh/* |tail -1 | awk '{print $2}')") + +log() +{ + prio=notice + if [ "$1" = "-p" ]; then + prio=$2 + shift 2 + fi + logger -sik -p "security.$prio" -t sshd "$@" +} + +check() +{ + if sshd -t >"$tmp" 2>&1; then + log "SSH hostkeys OK, setting ssh-hostkeys condition" + return 0 + fi + return 1 +} + +rc=0 +if ! check; then + files=$(awk '/invalid format/{print $6}' "$tmp" | sed 's/.*"\(.*\)".*/\1/') + for file in $files; do + log -p warn "Removing $file: invalid format!" + invalid=yes + rm "$file" + done + + if [ -n "$invalid" ]; then + log "Invalid hostkeys detected, regenerating all SSH hostkeys ..." + else + log "Generating SSH hostkeys ..." + fi + + if ssh-keygen -A; then + mv /etc/ssh/ssh_host_* "$dir/" + fi + if ! check; then + log -p err "Failed generating SSH hostkeys!" + rc=1 + fi +fi + +rm "$tmp" +exit $rc