4

Я пытался получить plink.exe (от создателя PuTTY) для установки локального SOCKS-прокси для удаленного сайта, а также некоторых туннелей.

Действие - просто запустить plink.exe с правильными параметрами. Там нет вопросов.

Условия связывают начало с доступным сетевым соединением, которое я считал разумным.

Затем я также установил его:

  • Разрешить выполнение задачи по требованию
  • Запустите задачу как можно скорее после того, как запланированный запуск пропущен
  • Если задача не выполняется, перезапускайте каждые: [1 минута]
  • Если запущенное задание не заканчивается по запросу, принудительно остановите его

Теперь все это прекрасно работает при запуске системы. Однако, когда я усыпляю машину и снова ее просыпаю, это не получается.

На самом деле, сразу после пробуждения, окно консоли plink.exe все еще видно, но исчезает (вероятно, из-за того, что тайм-аут сеанса SSH задолго до тайм-аута). Тем не менее, состояние задачи в этом случае по-прежнему отображается как « Выполнение», хотя оно явно исчезло (т. Е. Если бы я использовал CreateProcess , я был бы уведомлен о завершении процесса).

Статус означает, что я должен явно завершить его, а затем явно запустить его снова.

Кто-нибудь знает метод, с помощью которого я могу по существу научить запланированные задачи, что он должен перезапустить работу, когда процесс уходит? Я понятия не имею, что такое точная метрика, но ясно, что статус бега, который я наблюдаю, является поддельным.

Идея состоит в том, чтобы перезапускать plink.exe (таким образом восстанавливая прокси-сервер SOCKS) всякий раз, когда он выходит из строя . Будь то сразу после запуска и неудачной попытки подключения или после выхода машины из спящего режима.

NB: я ищу решение, которое может работать как на Windows 7, так и на Windows 10.


Согласно предложениям в комментариях, были изменены следующие две настройки:

Никогда не выключайте жесткий диск Не разрешать компьютеру отключать сетевую карту

1 ответ1

1

Я большой пользователь plink/ssh и его функций прокси-сервера SOCKS5 и переадресации портов. Вот мои идеи:

Будет сложно полагаться только на состояние процесса plink.exe, чтобы определить подключение вашего прокси-сервера SOCKS5 или любого SSH-перенаправления портов. Иногда ваше SSH-соединение может быть разорвано по любой случайной причине, но plink.exe не сможет его обнаружить и просто продолжит работать.

Чтобы убедиться, что ваш переадресационный порт SOCKS5 все еще работает, я собираюсь контролировать локальный прокси-порт SOCKS5. Это порт, к которому вы подключаетесь через браузер, чтобы использовать прокси (plink CLI -D 8008). Как только plink.exe завершит рукопожатие SSH, он выполнит переадресацию портов и прослушивает выбранный вами локальный порт (8008 из моего предыдущего примера). Если соединение SSH не было успешным, аварийно завершено, было отклонено, закрыто или отказано, порт SOCKS5 НЕ будет открыт и прослушивается. В этом случае порт 8008 НЕ будет доступен.

У меня есть небольшой скрипт PHP, который будет пытаться подключиться к этому локальному порту (8008):

function check_open_port($host, $port, $timeout)
{
    $connection = @fsockopen($host, $port, $errno, $errstr, $timeout);

    if (is_resource($connection))
    {
        fclose($connection);
        return true;
    }
    else return false;
}

Это должно создать почти нет трафика. И это легко кодировать на любом другом языке.

Вы также можете просто запустить curl и посмотреть, сможете ли вы получить возврат с популярного сайта через прокси-сервер SOCKS5 (создает немного больше трафика):

curl --socks5 127.0.0.1:8008 http://checkip.amazonaws.com/

Таким образом, вы можете настроить 2-е запланированное задание для запуска этого скрипта монитора каждые X минут и в случае ошибки убить процесс plink.exe и перезапустить (используйте pskill).

Вы также можете выполнить один скрипт для запуска plink.exe, мониторинга и перезагрузки, если это необходимо. Для запуска plink.exe в фоновом режиме (в PHP) используйте psexec exec("psexec -d plink.exe") . Теперь немедленно запустите цикл мониторинга и убедитесь, что перенаправленный локальный порт остается открытым.

Все это может показаться сложным, но это очень надежное решение. Он будет работать с любым видом ssh-портов (не только с SOCKS5). За последние 5 лет я прошел через множество настроек, чтобы сделать всю эту работу надежной ... Я не думаю, что вы можете сделать это с запланированными задачами и пьяны в одиночку.

Я также использую klink.exe (KiTTY) вместо plink.exe, который является форком от PuTTY. Это дает вам еще несколько возможностей для автоматизации процесса.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .