Небольшой скрипт, которым я пользуюсь для поднятия прокси-через-ssh. Висит в автозагрузке, постоянно проверяет при помощи курла доступность гугла, в случае недоступности — прибивает нужное ssh-соединение и открывает его снова.
ЗЫ: свой собственный прокси с шифрованием трафика средствами ssh — рекомендации лучших собаководов )
- #!/bin/sh
- # establishes an SSH Socks proxy and reconnects if it fails.
- socksPort=8376
- server=example.com
- user=myproxyuser
- key=~/.ssh/id_rsa_myproxyuser
- while true
- do
- timeout 20 curl --retry-max-time 1 --retry 5 --retry-delay 1 -x socks5://127.0.0.1:${socksPort} http://google.com/ > /dev/null 2>&1
- if [ $? -ne 0 ]
- then
- echo $(date) reconnect...
- while ps -eo pid,cmd | grep ssh | grep ${socksPort}
- do
- kill $(ps -eo pid,cmd | grep ssh | grep ${socksPort} | awk '{print $1}' | head -n 1)
- done;
- ssh -D ${socksPort} -f -q -N -i "${key}" ${user}@${server}
- else
- sleep 10
- fi
- done;
Вариант для cygwin
- #!/bin/sh
- # establishes an SSH Socks proxy and reconnects if it fails.
- socksPort=8376
- server=example.com
- user=myproxyuser
- key=~/.ssh/id_rsa_myproxyuser
- while true
- do
- timeout 20 curl -x socks5://127.0.0.1:${socksPort} http://google.com/ > /dev/null 2>&1
- if [ $? -ne 0 ]
- then
- while ps -e | grep ssh;
- do
- # /bin/kill - is important!
- /bin/kill -f $(grep -a "ssh" /proc/*/cmdline | grep -a ${socksPort} | awk -F '/' '{print $3}' | head -n 1)
- done;
- echo $(date) reconnect
- ssh -D ${socksPort} -fNq -i "${key}" ${user}@${server}
- else
- sleep 10
- fi
- done;