SSH как альтернатива proxy

Статус
В этой теме нельзя размещать новые ответы.

olga.armalita

Client
Регистрация
05.04.2014
Сообщения
194
Реакции
42
Баллы
28
Приветствую, в этой статье я расскажу вам как научить зеннопостер работать через ssh .
SSH это безопасный сетевой протокол, обеспечивающий защищенную аутентификацию, соединение и безопасную передачу данных между хостами сети, путем шифрования, проходящего через него трафика, с возможной компрессией данных. SSH так же называют альтернативой VPN.

Те кто еще не знаком с ssh наверно зададутся вопросом: а чем же ssh лучше прокси? Ответ прост, ssh в отличии от прокси не только обеспечивают более высокую анонимность, но и живут в среднем от нескольких недель, до нескольких месяцев. И при этом зачастую имеют неплохую скорость, так как она искусственно не ограничена. Таким образом купив, или добыв своими силами некоторое количество ssh , вы можете пользоваться ими довольно долгое время. Использовать ssh в зенно можно двумя способами, первый это использование ssh для смены ip в самом зенно(каждый поток в начале работы шаблона будет устанавливать соединение с ssh, а по окончании шаблона будет его разрывать), и второй это закручивание ssh туннелей на локальные порты чтобы их можно было использовать в стороннем софте.(по сути мы устанавливаем несколько соединений с ssh и оставляем их открытыми, после чего к ним можно подключиться и в зенно, и в стороннем софте как к обычному прокси по адресу 127.0.0.1:1234, где ip постоянный(localhost) а порты для каждого ssh свои. Если все равно не понятно то прочитайте статью до конца.)Дабы не растягивать статью, я не стану описывать такие пункты как создание входных настроек, списков и прочее. Если Вы начинающий пользователь то сможете найти все это и еще много чего интересного в zennowiki

Первый способ как я уже писал выше
заключается в использовании ssh в самом зенно

Для начала мы записываем ssh в файлик. Каждый ssh с новой строки. Обычно ssh имею такой вид 192.168.0.1;admin;default Где точка с запятой это разделитель, 192.168.0.1 это ip, следующим после ip идет логин (admin), и в конце пароль (default). В итого у нас получается вот такой список:
upload_2016-1-5_19-34-13.png

1. Первым делом мы помещаем все ssh в список, откуда и будем брать их по одному.
o2n9zt.png

Я положил все ssh в список с одноименным названием, и взяв из него первую строку положил ее в переменную "allSSH".
2. Использовать ssh в таком виде как он есть для подключения мы не сможем, по этому следующими тремя кубиками делим ssh на ip, логин и пароль, с занесением каждого в отдельную переменную. Они нам понадобятся немного позже.
2PZTz6.png

3. Для работы в многопоточном режиме нам нужно закрутить каждый ssh туннель на уникальный локальный порт. Я не стал заморачиваться с глобальными переменными и просто создал текстовый файлик с списком портов от 60000 до 65000. Если какой либо софт на вашем компьютере уже использует порт из этого диапазона, обязательно исключите этот порт из списка.
ZVT5EJ.png

4. Сначала берем порт из списка и помещаем его в переменную "portSSH", затем заносим эту переменную в конец того же списка. Таким образом порты никогда не закончатся, а по скольку в списке их 5 тысяч, то и пересекаться они не будут.
hA8kKm.png

Теперь у нас есть все что нужно для подключения к ssh.
5. А подключатся мы будем с помощью программы plink. Проверяем чтобы файлик plink.exe лежал рядом с проектом. И заносим аргументы для подключения в переменную. Я пытался передавать аргументы для plink.exe непосредственно через "запуск программы", но оно почему-то отказалось работать. Аргументы для подключения выглядят следующим образом:
-N -pw ПАРОЛЬ ЛОГИН@АЙПИАДРЕС -auto_store_key_in_cache -D127.0.0.1:УНИКАЛЬНЫЙ ПОРТ
pIs8PZ.png

6. Теперь пора подключаться к ssh, с помощью кода на C# который передаст аргументы файлу plink.exe, который в свою очередь установит соединение с ssh, и закрутит его на локальный порт.
WdSP0C.png

На это все потребуется некоторое время, по этому мы ставим паузу в 10 сек.
7. По окончании паузы подключаемся к локальному socks5 прокси.
qg4Ggg.png

8. И проверяем его работоспособность. Для этого я выбрал сайт wikipedia.
dCmMwT.png

Как вы видите я чекаю прокси поиском текста в теле страницы. Если текст найден значит ssh рабочий, и можно выполнять проект дальше. Или сохранять рабочие ssh в другой файлик, таким образом у нас получится чекер ssh.
9. Но в конце шаблона обязательно нужно добавить другой C# код
nQJxNw.png

который разорвет ssh туннель, и завершит процесс plink.exe. Если вы этого не сделаете то у вас будет висеть куча не завершенных процессов plink.exe, и соответственно порты использованные в них будут недоступны для новых подключений.
Паузу в 0 с поставил чтобы проект не завершался с ошибкой когда ssh не рабочий и соединение с ним не устанавливается вообще. По тому что в этом случае C# код не может завершить процесс plink.exe, так как он завершается сам еще раньше.

Второй способ дает возможность использовать ssh и в стороннем софте

На самом деле этот способ более предпочтителен и для работы с самим зенно, так как он значительно быстрее.
Суть его проста, мы устанавливаем соединение с ssh и закручиваем его на уникальный локальный порт, после чего записываем данные локального прокси для подключения в файлик, и используем эти данные в стороннем софте или в другом проекте зенно, подключаясь к ним как к обычному socks5 прокси.

Первым кубиком у нас будет стоять "if" который будет определять что мы хотим сделать, создать ssh туннели или завершить ранее созданные.
76DG49.png

Далее повторяем с первого по седьмой пункты предыдущего способа. Но в конце если ssh рабочий то записываем в выходной файл ip и порт локального прокси а не сам ssh.
Результатом работы этого шаблона будет множество процессов plink.exe в диспетчере задач(по одному на каждый ssh), и файлик с локальными прокси такого плана
t7HJpN.png

которые можно использовать и в стороннем софте, и в других шаблонах зенно как socks5 прокси.
Если же в входных настройках вы выберете "убиваем прокси" то код C#
dx42Kq.png

завершит все процессы plink.exe, что разорвет все установленные ssh туннели.
При использовании этого способа я устанавливал одновременно 150-200 соединений, без видимой негативной нагрузки на систему.


p.s. Шаблон работает в многопоточном режиме благодаря C# коду который отслеживает для каждого процесса plink.exe его pid(уникальный номер процесса), и в конце шаблона завершает именно тот процесс который нужно.

Файл plink.exe можно и нужно скачать на этой странице, (а тут прямая ссылка)
Оригинальный plink не подойдет по тому что он не понимает аргумент auto_store_key_in_cache, очень нужный нам для автоматического подключения.

В создании шаблона для работы с ssh неоценимую помощь оказали пользователи darkdiver и LexxWork , за что им огромное человеческое спасибо.
 
Номер конкурса статей
  1. Четвертый конкурс статей
Тема статьи
  1. Другое

Вложения

Последнее редактирование модератором:
знал бы раньше - не покупал бы масстунелер ) Спасибо. Только вот еще не описан момент, в котором сторонний софт(допустим онлайн сервис или просто ваша программа на сервере) обращается к вашему прокси , но оказывается что прокся не рабочая. Это может произойти, если ваш провайдер не выделил вам внешний ip , а повесил вас за NAT https://ru.wikipedia.org/wiki/NAT
 
знал бы раньше - не покупал бы масстунелер ) Спасибо. Только вот еще не описан момент, в котором сторонний софт(допустим онлайн сервис или просто ваша программа на сервере) обращается к вашему прокси , но оказывается что прокся не рабочая. Это может произойти, если ваш провайдер не выделил вам внешний ip , а повесил вас за NAT https://ru.wikipedia.org/wiki/NAT
К счастью у меня статический ip, по этому я с такими проблемами не сталкивался.
Но Вам большое спасибо за информацию, уверен она спасет пользователям с серыми ip много нервов:)
 
Ну вот спалил тему :)
Смущает только одно...
https://smuxi.im/issues/show/218 - тут вес plink 800kb оригинальный весит 300kb, а как я слышал очень давно по инету гуляет версия с трояном который всю инфу сливает куда не надо :(
 
Проблема в том что оригинальный plink не понимает команды auto_store_key_in_cache, без которой подключение к ssh в автоматическом режиме не получается(здесь как раз можно о этом почитать https://smuxi.im/issues/show/218). По крайней мере я другого варианта не нашел.
Вирустотал утверждает что этот файл не менялся с 2010 года. Поверьте, если бы в нем был троян то он спалился бы уже давно, но файл 0 / 54.
https://www.virustotal.com/ru/file/...f36ea7cd8e2bf15aad505e60/analysis/1447246555/
 
спасибо за полезную статью..
 
Статья фурор 2015 и в догонку тоже волнует вот этот вопрос


у меня провайдер жмот и режит трафик безбожно, очень многие ресы недоступны, а платные прокси вообще не работают :cm:
вот как этот злосчастный НАТ обходить, помимо смены провайдера, так как альтернативы пока нет и не предвидится
 
Спасибо за полезную и подробную статью, сама тема не нова и больше плюсов насобирал бы кто сделал бы мануал по добыче этих SSH
 
Получается работает в один поток?)
p.s. Шаблон работает в многопоточном режиме благодаря C# коду который отслеживает для каждого процесса plink.exe его pid(уникальный номер процесса), и в конце шаблона завершает именно тот процесс который нужно.
работаем в многопоточном режиме без проблем
 
Последнее редактирование:
Проблема в том что оригинальный plink не понимает команды auto_store_key_in_cache, без которой подключение к ssh в автоматическом режиме не получается(здесь как раз можно о этом почитать https://smuxi.im/issues/show/218). По крайней мере я другого варианта не нашел.
Плохо искали :-)
Делается все в 2 захода...
1. echo.exe y | plink.exe .... exit
2. повторный запуск плинка

К стате попробуйте может в 1 получится мне было лень ковырять...
 
  • Спасибо
Реакции: svaminar
ага плохо
а какая защита чтоб не рвались сесии через 60 сек неактивности
 
К стате сколько жрет оперативы не_оригинальный plink?
 
  • Спасибо
Реакции: Radzhab
Наконец-то хоть кто сделал внятный шаблон с ssh. Люто бешено плюсую.
 
  • Спасибо
Реакции: olga.armalita
К стате сколько жрет оперативы не_оригинальный plink?
T1Lw1F.png

wE72i8.png

итого около 5,4 мб.
а какая защита чтоб не рвались сесии через 60 сек неактивности
? у меня сесси никогда не рвались. Только что 20 мин провисела и хоть бы хны.
К стате попробуйте может в 1 получится мне было лень ковырять...
В один у меня не получилось. А вот про двойной заход действительно нигде информации не видел.
 
Последнее редактирование:
поясните. Чем это лучше работы с прокси? И где брать SSH? Легально :)
 
  • Спасибо
Реакции: LightWood
Если брать тестовый период для VPS, то SSH будет работать только во время тестового периода?
Или 1 раз взял тестовый период, получил SSH и можешь им потом пользоваться сколько захочешь (после окончания тестового периода)?
 
данни а подумать логически.
Канешно не будет
 
  • Спасибо
Реакции: Danny
Если есть свои впс, то легче уже сразу прокси на них поднять.
 
ага ага
Ты зае... поднимать прокси скажем на 100 тестовых впс каждение 7 дней.
 
Устал чистить тему, поэтому закрываю. Оставляю только главную статью, в которой показан принцип связки ZennoPoster с работой по SSH. Он пригодится тем, кто хочет использовать свои собственные сервера.
 
поясните. Чем это лучше работы с прокси? И где брать SSH?
Да элементарно все:
Берем практически любой облачный хостинг, где есть оплата за час.
Azure, AWS, DigitalOcean
из русских vscale.io или flops.ru например
Берем везде минимальные тарифы, получается что-то от 0,30 до 1 рубля в час, нагрузки ssh никакой практически не дает, хватит любых минимальных тарифов на Linux
У Azure вообще поминутная тарификация и 10000 рублей на месяц триальных есть.
У них у всех есть API, которое через POST и GET прекрасно автоматизируется или библиотеки для .NET есть
Алгоритм действий такой:
1. Создаем виртуальную машину через API указываем логин и пароль.
2. По готовности, виртуалку вам сразу выдают со включенным SSH
3. Работаем через нее как через socks5
4. По завершению работы удаляем виртуалку.

Редкие задачи требуют времени больше часа. Так что за разумную плату вы получаете новый IP, т.к. ДЦ у облачных провайдеров много, получаете еще IP и в нужном вам регионе.
Так что дешевых SSH тонны!
 
Статус
В этой теме нельзя размещать новые ответы.

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)