Скрипт KiTTY (форк PuTTY), который автоматически убивает определенный PID

486
argaud bastien

Новая версия

Итак, я сделаю список вещей, которые у меня есть, чтобы быть более понятным.

  • ПК на Windows 10 работает под управлением медиасервера Plex и Kitty
  • VPS от OVH работает на Debian 9

что я хочу :

  • хочу получить доступ к моему серверу из любой точки локальной сети

как :

  • используя VPS в качестве туннеля к моему серверу Plex

Проблема:

  • динамический ip Double Nat со стороны isp стороны 4G / LTE роутер с подпиской
  • перенаправление портов невозможно

выпуск:

  • при смене ip «ежедневно» на ПК (windows 10) соединение с vps через китти зависало

ручное решение вопроса:

  • найти PID процесса, который держит порт открытым и убить его

Что мне нужно :

  • сделать это автоматически или найти другое решение проблемы

Картинки, которые помогут вам понять

После смены ip в логе Китти

Ручной способ решения проблемы

Вопрос &

Pimp Juice IT : спасибо ^^ во всяком случае инструмент no-ip также показался мне вполне подходящим. Но так как у провайдера есть двойной NAT, и это в основном, я должен был бы запустить один софт No-ip на их втором "маршрутизаторе" позади моего. Что невозможно, вы бы согласились ^^. Действительно, моя проблема действительно проста, но раздражает, потому что кажется, что выход из этого прост. Но не могу получить правильный путь: /

ps: да, не волнуйтесь, старая версия - это большой набросок того, что я хотел, чтобы это было ^^ в новой, у вас есть все, что вам нужно, чтобы помочь мне, я думаю: / ^^

Old version

У меня есть VPS от OVH, который я использую для туннелирования своего медиасервера на PLEX от моего компьютера к VPS. Все хорошо и работает, кроме…

Мой IP динамический и двойной NAT-ред. Мой внешний IP-адрес меняется и обновляется часто, по крайней мере, один раз в день. Поэтому мое соединение с VPS через Kitty (форк PuTTY) обрывается. Это я решил с помощью автоматического переподключения после прерывания соединения. В любом случае, когда это будет сделано, туннелирование портов, которое я указал в KiTTY, не будет выполнено, потому что предыдущее соединение не было должным образом закрыто.

Для серверной части это Debian 9 Stretch.

Я нашел решение, которое заключается в том, что я нахожу PID самого соединения и уничтожаю его вручную . Есть моя проблема, я хотел бы автоматизировать это с помощью сценария. Здесь я призываю вас помочь, надеясь, что кто-нибудь может помочь.

PS: мои навыки в написании сценариев настолько низки, насколько это может показаться настолько ясным, насколько это возможно, спасибо.


Ответы на некоторые комментарии

Скотт - когда мой IP-адрес изменится, соединение прервется. Прямо тогда это восстановит связь благодаря KiTTY. Я бы в командной строке просто набралnetstat -lnp, он бы показал мне все живое соединение. Я нашел бы тот, который связан с указанным портом (в этом случае32400) и PID, который связан, а затем убил бы самPIDсkill. В прошлый раз PID был12007например.

Kamil Maciorowski - я попробовал это (ссылаясь на этот ответ на другой вопрос ):

навсегда, отредактировав /etc/sysctl.confфайл, добавьте:

net.ipv4.tcp_keepalive_time=300 

а также

Если только вы можете перенастроить sshdна сервере, это, на мой взгляд, самый элегантный способ. Пусть sshd_configсодержат такие строки:

ClientAliveCountMax 3 ClientAliveInterval 15 

но ни один из них не работает для меня, когда я имитирую сбой моего соединения, он будет переподключен, и порт все равно будет занят.

Также решение под

Вернуться к клиенту

Казалось бы, работать на меня, только если я смогу сделать его в соответствии с моей ситуацией.

«но ни один из них не работает для меня, когда я имитирую сбой моего соединения, он переподключится, и порт все равно будет занят» - Вы перезапустили sshd? Вы пытались восстановить соединение сразу? С этими настройками вам нужно подождать до одной минуты, пока порт не освободится. - Камиль Мачоровский

да, я перезапустил SSHD с помощью следующей команды:

/etc/init.d/ssh restart

и быть в безопасности, потому что я не знаю, что перезапустить SSHD

перезапуск службы sshd

переподключение происходит автоматически, и сейчас я ищу способ отсрочить этот процесс, если вы знаете, как просто сказать мне спасибо, чтобы вы знали:

net.ipv4.tcp_keepalive_time=300 

Я установил на 10 секунд, а не 300, это все в порядке.

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

Пояснение: в моем комментарии выше есть общий способ предотвратить блокировку себя вне сервера. Если вы достаточно серьезно сломаете sshd_config, вы не сможете ssh заново. Вот почему вы всегда должны проверять его с новым соединением, в то время как старое по-прежнему позволяет вам отменить изменения, несмотря ни на что. Обратите внимание, что в целом возможно иметь синтаксически правильный sshd_config и все еще не быть в состоянии соединиться; поэтому перезапуск sshd без ошибок не обязательно означает, что он будет работать. - Камиль Мачоровский

Итак, в конце концов, например, каковы мои решения для автоматизации этого процесса и освобождения порта через более короткий промежуток времени и как отложить переподключение в kitty с помощью скрипта или чего-то еще? еще раз спасибо за ваше время я ценю

«переподключение автоматизировано и моментально, я сейчас ищу способ отсрочить этот процесс» - вы имеете в виду, что KiTTY пытается восстановить соединение без какой-либо задержки, верно? В Linux на стороне клиента вашу проблему легко решить с помощью autossh или цикла ssh -o ExitOnForwardFailure = yes… (см. Этот ответ). Я думаю, что ssh под Cygwin должен поддерживать эту опцию. Если вы настаиваете на сценарии на стороне сервера, я думаю, это можно сделать; но скрипт не должен убивать туннель, если это не старый туннель. У меня нет времени, чтобы предоставить такое громоздкое решение; может быть через 12 часов. - Камиль Мачоровский

Хорошо, спасибо, увидимся через 12 часов, в любом случае, до тех пор, пока я не попробую все другие решения, я дам вам знать, как это происходит, спасибо еще раз, человек.

2
Было бы полезно, если бы вы описали точную процедуру, которую вы используете для ручного поиска PID соединения. Пожалуйста, не отвечайте в комментариях; [отредактируйте] ваш вопрос, чтобы сделать его более понятным и полным. Scott 6 лет назад 0
Вы отметили "[tag: windows]". Я предполагаю, что это относится как к стороне клиента, так и к стороне сервера. Решение для Linux `sshd`-сервера находится в [этом ответе] (https://superuser.com/a/1283733/432690), на стороне сервера, в ClientAliveCountMax и ClientAliveInterval. Kamil Maciorowski 6 лет назад 0
«но ни один из них не работает для меня, когда я имитирую сбой моего соединения, он переподключится, и порт все равно будет занят» - Вы перезапустили `sshd`? Вы пытались восстановить соединение сразу? С этими настройками вам нужно подождать до одной минуты, пока порт не освободится. Kamil Maciorowski 6 лет назад 0
Замечание по перезапуску `sshd`: [* Всегда ли при перезапуске sshd поддерживаются существующие сеансы? *] (Https://superuser.com/q/60407/432690) Для большей безопасности сохраните исходный сеанс и подключите другой сеанс после вас. применить изменения. Если вы не можете подключиться, что означает, что вы заблокируете себя, используйте первый сеанс, чтобы исправить это. Kamil Maciorowski 6 лет назад 0
Пояснение: в моем комментарии выше есть общий способ предотвратить блокировку себя вне сервера. Если вы достаточно серьезно сломаете `sshd_config`, вы * не сможете ssh заново. Вот почему вы всегда должны проверять его с новым соединением, в то время как старое по-прежнему позволяет вам отменить изменения, несмотря ни на что. Обратите внимание, что в целом возможно иметь синтаксически правильный `sshd_config` и при этом не иметь возможности подключения; поэтому перезапуск `sshd` без ошибок не обязательно означает, что он будет работать. Kamil Maciorowski 6 лет назад 0
«переподключение автоматизировано и моментально, я сейчас ищу способ отсрочить этот процесс» - вы имеете в виду, что KiTTY пытается восстановить соединение без какой-либо задержки, верно? В Linux на стороне клиента ваша проблема может быть легко решена с помощью `autossh` или цикла` ssh -o ExitOnForwardFailure = yes… `(см. [Этот ответ] (https://superuser.com/a/1281741/432690)). Я думаю, что `ssh` под Cygwin должен поддерживать эту опцию. Если вы настаиваете на сценарии на стороне сервера, я думаю, это можно сделать; но скрипт не должен убивать туннель, если это не старый туннель. У меня нет времени, чтобы предоставить такое громоздкое решение; может быть через 12 часов. Kamil Maciorowski 6 лет назад 0
(1) Правило: одна проблема, один вопрос. Ваше последнее редактирование вводит совершенно новую проблему, это должен быть отдельный вопрос. (2) Без каких-либо изменений это был бы ужасный вопрос. [Проблема XY] (https://meta.stackexchange.com/q/66377/355310)? Вы должны указать, что вы пытаетесь достичь через какой туннель. Например, HTTP-сервер может размещать несколько сайтов на одном IP-адресе и одном порту. Какой сайт вы получите, зависит от используемого вами URL. Нераспознанный URL будет отклонен. (3) Пожалуйста, постройте все ваши предложения с пунктуацией. Я устал разбивать эти потоки слов, которые вы используете, на правильные предложения. Kamil Maciorowski 6 лет назад 0
Эта ветка комментариев "* уникальный *" !!! Львы, тигры и уникальные темы комментариев в ответах; о мой !! Pimp Juice IT 6 лет назад 0
Добро пожаловать в SuperUser, я рад видеть, что вы так много практикуете в редактировании вопросов, и я, безусловно, могу оценить эти усилия, так что иди @argaudbastien, это твой день рождения !! Серьезно, хотя, не задумываясь об этом, это звучит как что-то вроде https://www.noip.com/login и использование [Динамический DNS] (https://en.wikipedia.org/wiki/Dynamic_DNS) может быть работоспособным решение проблемы с изменяющимся публичным IP-адресом провайдера ... https://www.noip.com/support/knowledgebase/install-the-linux-dynamic-update-client/ Pimp Juice IT 6 лет назад 0
Я не был заинтересован в чтении старой версии, так как для меня она старая, которая звучит как «неактуальная», и поэтому нет необходимости копаться в ней. Pimp Juice IT 6 лет назад 0

0 ответов на вопрос

Похожие вопросы