wok diff shellinabox/stuff/shellinabox @ rev 24924

Add as & asxxxx
author Pascal Bellard <pascal.bellard@slitaz.org>
date Wed Apr 13 10:27:34 2022 +0000 (2022-04-13)
parents
children
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/shellinabox/stuff/shellinabox	Wed Apr 13 10:27:34 2022 +0000
     1.3 @@ -0,0 +1,103 @@
     1.4 +#!/bin/sh
     1.5 +
     1.6 +services="/"
     1.7 +
     1.8 +mkexe()
     1.9 +{
    1.10 +exe=$0
    1.11 +while true; do
    1.12 +	cd $(dirname $exe)
    1.13 +	exe=$(basename $exe)
    1.14 +	[ -L $exe ] || break
    1.15 +	exe=$(readlink $exe)
    1.16 +done
    1.17 +echo $(pwd)/$exe
    1.18 +}
    1.19 +exe=$(mkexe)
    1.20 +
    1.21 +services_arg()
    1.22 +{
    1.23 +for i in $services ; do
    1.24 +	echo -n "-s '$i:root:root:/tmp:LINES=25 /bin/sh -c \"$exe service $i "
    1.25 +	echo -n "\${peer} \${url} \${columns} \${lines}\"' "
    1.26 +done
    1.27 +}
    1.28 +
    1.29 +launch_ssh()
    1.30 +{
    1.31 +	server=""
    1.32 +	sequence=""
    1.33 +	for i in $(echo "$2" | sed 's/[?&,]/ /g'); do
    1.34 +		case "$i" in
    1.35 +		host=*)		server=${i#host=};;
    1.36 +		knock=*)	sequence=${i#knock=};;
    1.37 +		esac
    1.38 +	done
    1.39 +	if [ -z "$server" ]; then
    1.40 +		# Get SSH server
    1.41 +		echo "Expected format [!][telnet/][user@][host][:port], default local login."
    1.42 +		echo -n "TELNET/SSH server: "
    1.43 +		read -t 300 server
    1.44 +	fi
    1.45 +	[ -n "$server" ] || exec /bin/login
    1.46 +
    1.47 +	# Allow non default SSH port with format server:port
    1.48 +	port=""
    1.49 +	sshport=""
    1.50 +	case "$server" in
    1.51 +	*:*)	port="${server#*:}"
    1.52 +		sshport="-p $port"
    1.53 +		server=${server%:*};;
    1.54 +	esac
    1.55 +
    1.56 +	# heading ! in server name means open remote ssh port with a knock sequence
    1.57 +	if which knock > /dev/null; then
    1.58 +		case "$server" in
    1.59 +		!*)	server=${server#*!}
    1.60 +			if [ -z "$sequence" ]; then
    1.61 +				echo -n "Knock sequence (port[:proto]...): "
    1.62 +				read -t 30 sequence && 
    1.63 +				knock ${server#*@} ${sequence//-/ }
    1.64 +			else
    1.65 +				knock ${server#*@} ${sequence//-/ }
    1.66 +			fi
    1.67 +		esac
    1.68 +	fi
    1.69 +
    1.70 +	# Get SSH user if missing
    1.71 +	case "$server" in
    1.72 +	*/*|*@*)	;;
    1.73 +	*)	echo -n "$server login: "
    1.74 +		read -t 30 user || exit 1
    1.75 +		[ -n "$user" ] || exit 1
    1.76 +		server="$user@$server";;
    1.77 +	esac
    1.78 +
    1.79 +	# Launch OpenSSH or Dropbear
    1.80 +	sshargs="-oPreferredAuthentications=keyboard-interactive,password -oNoHostAuthenticationForLocalhost=yes -oLogLevel=FATAL -F/dev/null";
    1.81 +	[ -L /usr/bin/ssh ] && sshargs=""
    1.82 +	case "$server" in
    1.83 +	*/*)	exec ${server%/*} ${server#*/} $port ;;
    1.84 +	*)	exec ssh $sshport $sshargs $server ;;
    1.85 +	esac
    1.86 +}
    1.87 +
    1.88 +pidfile=/var/run/shellinaboxd.pid
    1.89 +case "$1" in
    1.90 +service)
    1.91 +	case "$2" in
    1.92 +	/)	shift 2; launch_ssh "$@" ;;
    1.93 +	esac
    1.94 +	;;
    1.95 +start)
    1.96 +	dir=$(dirname $exe)
    1.97 +	eval shellinaboxd --background=$pidfile --user=0 \
    1.98 +		--css=/usr/share/shellinabox/object.css \
    1.99 +		--user-css 10px:-/usr/share/shellinabox/10px.css,12px:+/usr/share/shellinabox/12px.css,14px:-/usr/share/shellinabox/14px.css,16px:-/usr/share/shellinabox/16px.css \
   1.100 +		--user-css Normal:+/usr/share/shellinabox/black-on-white.css,Reverse:-/usr/share/shellinabox/white-on-black.css \
   1.101 +		-s /login:LOGIN $(services_arg)
   1.102 +	;;
   1.103 +stop)
   1.104 +	[ -s $pidfile ] && kill $(cat $pidfile)
   1.105 +	;;
   1.106 +esac