#!/bin/bash get_fingerprint() { local keyfile="$1" dropbearkey -y -f "${keyfile}" | sed -n '/^Fingerprint:/ {s/Fingerprint: *//; p}' } display_fingerprints() { local keyfile for keyfile in "/etc/dropbear/dropbear_dss_host_key" "/etc/dropbear/dropbear_rsa_host_key" ; do if [ ! -r "${keyfile}" ] ; then return 1 fi echo "$(basename "${keyfile}") : $(get_fingerprint "${keyfile}")" done } copy_openssh_keys() { local osshrsa="/etc/ssh/ssh_host_rsa_key" local osshdsa="/etc/ssh/ssh_host_dsa_key" local dbpre="/etc/dropbear/dropbear_" [ -f "$osshrsa" ] && [ -f "$osshdsa" ] || return 1 dropbearconvert openssh dropbear $osshrsa ${dbpre}rsa_host_key dropbearconvert openssh dropbear $osshdsa ${dbpre}dss_host_key } generate_keys() { local keyfile keytype for keytype in dss rsa ; do keyfile="/etc/dropbear/dropbear_${keytype}_host_key" echo "Generating ${keytype} host key for dropbear ..." dropbearkey -t "${keytype}" -f "${keyfile}" done } make_etc_passwd() { echo 'root:x:0:0:root:/:/bin/ash' > "${TMPDIR}"/passwd } build () { # # Begin real processing # # Are we even needed? if [ ! -e "/etc/dropbear/root_key" ]; then echo "There is no root key in /etc/dropbear/root_key existent; exit" return 0 fi # if TMPDIR is set leave it alone otherwise set [ -z $TMPDIR ] && TMPDIR='/tmp/dropbear_initrd_encrypt' # check if TMPDIR exsists if not make it [ -d $TMPDIR ] || mkdir -p $TMPDIR umask 0022 [ -d /etc/dropbear ] && mkdir -p /etc/dropbear display_fingerprints || copy_openssh_keys || generate_keys [ -e "${TMPDIR}/passwd" ] && ( grep -q -e '^root:' "${TMPDIR}/passwd" ) || make_etc_passwd add_checked_modules "/drivers/net/" add_binary "rm" add_binary "dropbear" add_binary "killall" echo '/bin/ash' > "${TMPDIR}"/shells add_file "${TMPDIR}/shells" "/etc/shells" cat /etc/dropbear/root_key > "${TMPDIR}"/authorized_keys add_dir "/.ssh" add_file "${TMPDIR}/authorized_keys" "/.ssh/authorized_keys" add_file "${TMPDIR}/passwd" "/etc/passwd" add_dir "/etc/dropbear" add_file "/etc/dropbear/dropbear_rsa_host_key" add_file "/etc/dropbear/dropbear_dss_host_key" add_file "/lib/libnss_files.so.2" add_binary "ip" "/sbin/ip" add_dir "/var/run" touch "${TMPDIR}"/lastlog add_dir "/var/log" add_file "${TMPDIR}/lastlog" "/var/log/lastlog" add_binary "/usr/lib/initcpio/ipconfig" "/bin/ipconfig" # cleanup rm "${TMPDIR}/shells" rm "${TMPDIR}/authorized_keys" rm "${TMPDIR}/passwd" rm "${TMPDIR}/lastlog" add_runscript } help () { cat<