未验证 提交 697d0d06 编写于 作者: T Toan Nguyen 提交者: GitHub

tools/autossh.sh

This is a small script which allows you reconnect to SSH automatically without installing a package like `mosh-server`
上级 b5277666
#!/usr/bin/env bash
# ------------------------------------------------------------------------------
# FILE: autossh
# DESCRIPTION: This is an SSH-D proxy with auto-reconnect on disconnect
# AUTHOR: Toan Nguyen (nntoan at protonmail dot com)
# VERSION: 1.0.0
# ------------------------------------------------------------------------------
VERSION="1.0.0"
GITHUB="https://github.com/nntoan/autossh"
AUTHOR="Toan Nguyen"
SCRIPT=${0##*/}
IFS=$'\n'
ALIVE=0
HISTFILE="$HOME/.autossh.history"
# Use colors, but only if connected to a terminal, and that terminal supports them.
if which tput >/dev/null 2>&1; then
ncolors=$(tput colors)
fi
if [ -t 1 ] && [ -n "$ncolors" ] && [ "$ncolors" -ge 8 ]; then
RED="$(tput setaf 1)"
GREEN="$(tput setaf 2)"
YELLOW="$(tput setaf 3)"
BLUE="$(tput setaf 4)"
BOLD="$(tput bold)"
NORMAL="$(tput sgr0)"
else
RED=""
GREEN=""
YELLOW=""
BLUE=""
BOLD=""
NORMAL=""
fi
# Progress or something
start_progress()
{
while true
do
echo -ne "#"
sleep 1
done
}
quick_progress()
{
while true
do
echo -ne "#"
sleep .033
done
}
long_progress()
{
while true
do
echo -ne "#"
sleep 3
done
}
dot_progress()
{
for i in {1..100}; do
printf "." $i -1 $i
sleep .033
done
echo_c green " 100%{$NORMAL}"
sleep 1
}
stop_progress()
{
kill $1
wait $1 2>/dev/null
echo -en "\n"
}
# Case-insensitive for regex matching
shopt -s nocasematch
# Prepare history mode
set -i
history -c
history -r
# Input method
get_input()
{
read -e -p "${BLUE}$1${NORMAL}" "$2"
history -s "${!2}"
}
# Echo in bold
echo_b()
{
if [ "$1" = "-e" ]; then
echo -e "${BOLD}$2${NORMAL}"
else
echo "${BOLD}$1${NORMAL}"
fi
}
# Echo in colour
echo_c()
{
case "$1" in
red | r | -red | -r | --red | --r ) echo "${RED}$2${NORMAL}" ;;
green | g | -green | -g | --green | --g ) echo "${GREEN}$2${NORMAL}" ;;
blue | b | -blue | -b | --blue | --b ) echo "${BLUE}$2${NORMAL}" ;;
yellow | y | -yellow | -y | --yellow | --y ) echo "${YELLOW}$2${NORMAL}" ;;
* ) echo "$(BOLD)$2$(RESET)" ;;
esac
}
# Get data from parameters
if [[ ! -n "$remote_param" && -n "$1" ]]; then
remote_param="$1"
remote_user="${remote_param%%@*}"
remote_ip="${remote_param##*@}"
fi
# Get input data and save to history
save_input()
{
if [[ ! -n "$remote_user" && ! -n "$1" ]]; then
while get_input "SSH Username > " remote_user; do
case ${remote_user%% *} in
* )
if [ -n "$remote_user" ]; then
break
else
continue
fi
;;
esac
done
fi
if [[ ! -n "$remote_ip" && ! -n "$1" ]]; then
while get_input "SSH Alias/IP-address > " remote_ip; do
case ${remote_ip%% *} in
* )
if [ -n "$remote_ip" ]; then
break
else
continue
fi
;;
esac
done
fi
}
# Infinitie loop to keep connecting
auto_connect()
{
while true; do
exist=`ps aux | grep $remote_user@$remote_ip | grep 22`
if test -n "$exist"
then
if test $ALIVE -eq 0
then
echo_c yellow "I'm alive since $(date)"
fi
ALIVE=1
else
ALIVE=0
echo_c red "I'm dead... God is bringing me back..."
clear
printf "${GREEN}Connecting: "
for i in {1..100}; do
printf "." $i -1 $i
sleep .033
done
echo_c green " 100%${NORMAL}"
sleep 1
clear
ssh $remote_user@$remote_ip
fi
sleep 1
done
}
main()
{
save_input
auto_connect
}
main
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册