diff --git a/etc/tunnelkeeper.conf b/etc/tunnelkeeper.conf index d222141..19b20c7 100644 --- a/etc/tunnelkeeper.conf +++ b/etc/tunnelkeeper.conf @@ -14,3 +14,8 @@ debug 0 # Hostname 123.45.67.90 # User ubuntu # LocalForward 10002 127.0.0.1:22 + +[passwords] +# Use this section at your own risk, because the passwords are stored in plaintext. + +#server1 p@$$w0rd \ No newline at end of file diff --git a/tunnelkeeper b/tunnelkeeper index 3376ce1..6d414b5 100755 --- a/tunnelkeeper +++ b/tunnelkeeper @@ -12,6 +12,7 @@ fi SSHCONF="$BASEDIR/var/[ssh].conf" TKCONF="$BASEDIR/var/[settings].conf" +PWCONF="$BASEDIR/var/[passwords].conf" function ruroot () { if [[ $UID -ne 0 ]]; then @@ -34,9 +35,29 @@ function dbg () { case "$1" in FORKSTART ) echo -n $$ > "$BASEDIR/var/${2}.connected" + if [[ grep -c "^$2" $PWCONF ]]; then + pass=$(awk "/^$2/ {print \$2}" ${PWCONF}) + screen -d -m -S "tk${2}" "$0 FORKSCREEN $2" + while [[ -e "$BASEDIR/var/${2}.connected" ]]; do + sleep 5 + if [[ -f "$BASEDIR/var/${2}.screen" ]]; then + screen -S "tk${2}" -X stuff "$pass +" + rm -f "$BASEDIR/var/${2}.screen" + fi + done + else + while [[ -e "$BASEDIR/var/${2}.connected" ]]; do + # passwordless auth + ssh -F "${SSHCONF}" $dbgopt -N $2 2>&1 | dbg + sleep 5 + done + fi + ;; + FORKSCREEN ) while [[ -e "$BASEDIR/var/${2}.connected" ]]; do + echo $$ > "$BASEDIR/var/${2}.screen" ssh -F "${SSHCONF}" $dbgopt -N $2 2>&1 | dbg - sleep 5 done ;; FORKKILL ) kill $(sudo netstat -tnlp | grep "127[0-9\.]*:${2}" | grep -o '[0-9]*/ssh' | grep -o '[0-9]*') &>/dev/null ;; @@ -60,6 +81,7 @@ case "$1" in ;; install ) ruroot + which screen &>/dev/null || yum install -y screen || apt install -y screen mkdir -p /opt/tunnelkeeper/var mkdir -p /opt/tunnelkeeper/etc if [[ "$BASEDIR" != '/opt/tunnelkeeper/' ]]; then