111 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/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<<HELPEOF
 | |
| Allow SSH access to an initial environment for debugging.
 | |
| HELPEOF
 | |
| }
 |