Скрипт для поднятия SOCKS-прокси посредством ssh с проверкой его работоспособности

Небольшой скрипт, которым я пользуюсь для поднятия прокси-через-ssh. Висит в автозагрузке, постоянно проверяет при помощи курла доступность гугла, в случае недоступности — прибивает нужное ssh-соединение и открывает его снова.

ЗЫ: свой собственный прокси с шифрованием трафика средствами ssh — рекомендации лучших собаководов )

proxy.sh
 
  1. #!/bin/sh
  2. # establishes an SSH Socks proxy and reconnects if it fails.
  3. socksPort=8376
  4. server=example.com
  5. user=myproxyuser
  6. key=~/.ssh/id_rsa_myproxyuser
  7. while true
  8. do
  9.     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
  10.     if [ $? -ne 0 ]
  11.     then
  12.         echo $(date) reconnect...
  13.         while ps -eo pid,cmd | grep ssh | grep ${socksPort}
  14.         do
  15.             kill $(ps -eo pid,cmd | grep ssh | grep ${socksPort} | awk '{print $1}' | head -n 1)
  16.         done;
  17.         ssh -D ${socksPort} -f  -q -N -i "${key}" ${user}@${server}
  18.     else
  19.         sleep 10
  20.     fi
  21. done;

Вариант для cygwin

proxy_cygwin.sh
 
  1. #!/bin/sh
  2. # establishes an SSH Socks proxy and reconnects if it fails.
  3. socksPort=8376
  4. server=example.com
  5. user=myproxyuser
  6. key=~/.ssh/id_rsa_myproxyuser
  7. while true
  8. do
  9.     timeout 20  curl -x socks5://127.0.0.1:${socksPort} http://google.com/  > /dev/null 2>&1
  10.     if [ $? -ne 0 ]
  11.     then
  12.         while ps -e | grep ssh;
  13.         do
  14.             # /bin/kill - is important!
  15.             /bin/kill -f $(grep -a "ssh" /proc/*/cmdline  | grep -a  ${socksPort} | awk -F '/' '{print $3}' | head -n 1)
  16.         done;
  17.         echo $(date) reconnect
  18.         ssh -D ${socksPort} -fNq -i "${key}" ${user}@${server}
  19.     else
  20.         sleep 10
  21.     fi
  22. done;
Поделиться:
Метки: , , , , . Закладка Постоянная ссылка.

Отправить ответ

Please Login to comment