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 |