slitaz-dev-tools annotate mirror-tools/rootfs/usr/share/mirror-host/boot/shellinabox.sh @ rev 6

Moved everthing that should be in root (/) into rootfs folder in mirror-tools.
author Christopher Rogers <slaxemulator@gmail.com>
date Thu Feb 24 01:59:21 2011 +0000 (2011-02-24)
parents
children a6b28f1e53eb
rev   line source
slaxemulator@6 1 #!/bin/sh
slaxemulator@6 2
slaxemulator@6 3 services="/ /reset /reboot /ssh"
slaxemulator@6 4
slaxemulator@6 5 mkexe()
slaxemulator@6 6 {
slaxemulator@6 7 exe=$0
slaxemulator@6 8 while true; do
slaxemulator@6 9 cd $(dirname $exe)
slaxemulator@6 10 exe=$(basename $exe)
slaxemulator@6 11 [ -L $exe ] || break
slaxemulator@6 12 exe=$(readlink $exe)
slaxemulator@6 13 done
slaxemulator@6 14 echo $(pwd)/$exe
slaxemulator@6 15 }
slaxemulator@6 16 exe=$(mkexe)
slaxemulator@6 17
slaxemulator@6 18 services_arg()
slaxemulator@6 19 {
slaxemulator@6 20 for i in $services ; do
slaxemulator@6 21 echo -n "-s '$i:root:root:/tmp:LINES=25 /bin/sh -c \"$exe service $i "
slaxemulator@6 22 echo -n "\${peer} \${url} \${columns} \${lines}\"' "
slaxemulator@6 23 done
slaxemulator@6 24 }
slaxemulator@6 25
slaxemulator@6 26 launch_ssh()
slaxemulator@6 27 {
slaxemulator@6 28 # Get SSH server
slaxemulator@6 29 server=""
slaxemulator@6 30 echo -n "SSH server: "
slaxemulator@6 31 read -t 300 server || exit 1
slaxemulator@6 32 [ -n "$server" ] || exit 1
slaxemulator@6 33
slaxemulator@6 34 # Allow non default SSH port with format server:port
slaxemulator@6 35 sshport=""
slaxemulator@6 36 case "$server" in
slaxemulator@6 37 *:*) sshport="-p ${server#*:}"
slaxemulator@6 38 server=${server%:*};;
slaxemulator@6 39 esac
slaxemulator@6 40
slaxemulator@6 41 # heading ! in server name means open remote ssh port with a knock sequence
slaxemulator@6 42 if [ -x /usr/bin/knock ]; then
slaxemulator@6 43 case "$server" in
slaxemulator@6 44 !*) server=${server#*!}
slaxemulator@6 45 echo -n "Knock sequence (port[:proto]...): "
slaxemulator@6 46 read -t 30 sequence && knock ${server#*@} $sequence
slaxemulator@6 47 esac
slaxemulator@6 48 fi
slaxemulator@6 49
slaxemulator@6 50 # Get SSH user if missing
slaxemulator@6 51 case "$server" in
slaxemulator@6 52 *@*) ;;
slaxemulator@6 53 *) echo -n "$server login: "
slaxemulator@6 54 read -t 30 user || exit 1
slaxemulator@6 55 server="$user@$server";;
slaxemulator@6 56 esac
slaxemulator@6 57
slaxemulator@6 58 # Launch OpenSSH or Dropbear
slaxemulator@6 59 sshargs="-oPreferredAuthentications=keyboard-interactive,password -oNoHostAuthenticationForLocalhost=yes -oLogLevel=FATAL -F/dev/null";
slaxemulator@6 60 [ -L /usr/bin/ssh ] && sshargs=""
slaxemulator@6 61 exec ssh $sshport $sshargs $server
slaxemulator@6 62 }
slaxemulator@6 63
slaxemulator@6 64 auth()
slaxemulator@6 65 {
slaxemulator@6 66 while read host md5 ; do
slaxemulator@6 67 [ "${host#*.}" == "${1#*.}" ] && break
slaxemulator@6 68 done < $(dirname $exe)/shellinabox.secrets
slaxemulator@6 69 echo -n "$host password: "
slaxemulator@6 70 read -s -t 30 password || exit 1
slaxemulator@6 71 [ "$(echo $password | md5sum)" == "$md5 -" ] || exit 1
slaxemulator@6 72 echo ""
slaxemulator@6 73 }
slaxemulator@6 74
slaxemulator@6 75 pidfile=/var/run/shellinaboxd.pid
slaxemulator@6 76 case "$1" in
slaxemulator@6 77 service)
slaxemulator@6 78 host=$(echo $4 | sed 's/.*\/\/\(.*\):.*/\1/')
slaxemulator@6 79 tty=$(awk "/$host/ { print \$2 }" /etc/inittab)
slaxemulator@6 80 vm=$(awk "/$host/ { print \$3 }" /etc/inittab)
slaxemulator@6 81 [ -n "$vm" ] || exit 1
slaxemulator@6 82 case "$2" in
slaxemulator@6 83 /)
slaxemulator@6 84 auth $host
slaxemulator@6 85 exec /usr/bin/conspy ${tty#tty} ;;
slaxemulator@6 86 /reboot)
slaxemulator@6 87 auth $host
slaxemulator@6 88 echo -n "Sure to reboot $host now (YES or NO) ?"
slaxemulator@6 89 read -t 30 answer || exit 1
slaxemulator@6 90 case "$answer" in
slaxemulator@6 91 YES*) ;;
slaxemulator@6 92 *) exit 1;;
slaxemulator@6 93 esac
slaxemulator@6 94 exec /bin/kill $(ps ww | grep $vm | awk '/lguest/ { printf "%s ",$1 }') ;;
slaxemulator@6 95 /ssh)
slaxemulator@6 96 auth $host
slaxemulator@6 97 launch_ssh ;;
slaxemulator@6 98 esac
slaxemulator@6 99 ;;
slaxemulator@6 100 start)
slaxemulator@6 101 dir=$(dirname $exe)
slaxemulator@6 102 eval shellinaboxd --background=$pidfile --cert=/boot/cert $(services_arg)
slaxemulator@6 103 ;;
slaxemulator@6 104 stop)
slaxemulator@6 105 [ -s $pidfile ] && kill $(cat $pidfile)
slaxemulator@6 106 ;;
slaxemulator@6 107 esac