LINUX.ORG.RU
решено ФорумAdmin

Как правильно погасить прокси после ssh -D -f ?

 ,


0

1

Привет. я хочу использовать реммину (веб плагин) для того чтобы заходить на внутренние вебморды, есть ssh сервер наружу по ключу. Перед соединением поднимаю туннель ssh -D -f -N, есть возможность использовать socks5 в самой реммине для этого. В общем с соединением никаких проблем. Проблема в том, что после использования остается поднятый туннель и погасить его можно только киллом. Есть ли способ культурно без килла погасить ssh прокси, чтобы вписать это в строку «Команда после закрытия соединения?» Килл плох еще и тем что он убьет например другие открытые ssh которые нужны.

Насколько я посмотрел в мане - нельзя. Это определённо упущение со стороны авторов ssh, можешь прислать им патч чтобы ssh pid демонизированого процесса куда-то сообщал. Через шелл нельзя, если что - шелл видит только pid родительского ssh который успешно сам завершается и так.

Килл плох еще и тем что он убьет например другие открытые ssh которые нужны.

А вот тут нет. Он убьёт только один процесс, проблема только узнать его pid. Пока что можно устраивать костыли с ps | grep, надеясь что второй точно такой же туннель (с такой же командной строкой) не будет параллельно запущен и нужен.

Или вместо ключа -f использовать шелловское & и там уже можно pid посмотреть автоматизированно.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 5)
Ответ на: комментарий от firkax

Дело в том что я не пишу скрипт для шелла а хочу использовать команду внутри реммины. Вряд ли там прокатят & и прочие сложные вещи. А вот ситуацию когда нужно открыть 2 соединения сразу я сейчас проверил и получилась странная вешь - поднимаются 2 идентичных процесса ssh но слушает всего 1 порт 8888 на 127.0.0.1
В реммине нет способа запускать какую то команду при входе а потом при выходе из всей проги (тогда я бы мог обойтись одним туннелем на всё сразу). Кроме того предусматриваю гипотетическую ситуацию если мне понадобится открыть несколько туннелей в разные места через разные сервера соответственно. Значит по любому нужно способ как убрать лишние процессы, может быть послать какую то команду в сам ssh по завершению например?

justin_case
() автор топика

Что там у тебя за «команда после закрытия соединения» я не знаю, но утилита pkill имеет аргумент --full, скорее всего тебе нужно именно это. Для тестирования можешь заменить pkill на pgrep - он имеет схожий набор аргументов(--full в наличии) и вместо отсыла сигнала процессам выводит их pid.

Пример:

pinkbyte@oas1 ~/dev/test $ ssh -fN mini-router
pinkbyte@oas1 ~/dev/test $ ssh -fN admin@apollo

pinkbyte@oas1 ~/dev/test $ ps aux | grep 'ssh '
pinkbyte 29166  0.0  0.0  10576   592 ?        Ss   16:56   0:00 ssh -fN mini-router
pinkbyte 29424  0.2  0.0  10836  2720 ?        Ss   16:57   0:00 ssh -fN admin@apollo

pinkbyte@oas1 ~/dev/test $ pkill -f 'ssh -fN admin@apollo'

pinkbyte@oas1 ~/dev/test $ ps aux | grep 'ssh '
pinkbyte 29166  0.0  0.0  10836  2244 ?        Ss   16:56   0:00 ssh -fN mini-ruter

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 2)

Запуск:

/sbin/start-stop-daemon --background --make-pidfile --pidfile /run/user/$UID/ssh-tun-myhost.pid --exec /bin/ssh --start -- -D address:port -N myhost

останов:

/sbin/start-stop-daemon --remove-pidfile --pidfile /run/user/$UID/ssh-tun-myhost.pid --stop
No
()

Решил через -M -S /tmp/какойтофайл и для завершения -O exit -S /tmp/тотжефайл.

Сокс гасится и при этом не убивает паралельные ssh сессии через тот же ssh сервер.

Однако обнаружил отвратительную гадость в самой реммине - если свернуть (не закрыть а именно свернуть) окно web то она просто падает и тогда конечно туннель остается. Если сделать соединение без туннеля (например к роутеру в своей же сети), то все ровно так же, то есть проблема видимо в плагине.

justin_case
() автор топика
Ответ на: комментарий от firkax

Модуль www называется. По сути встроеный браузер, нужен только для того чтобы соединиться с мордой через прокси после выполнения какой то команды. Вот например поднятия туннеля. Если туннель не нужен то имеет такой же функционал как обычная закладка в обычном браузере и все. Просто будет в списке рядом с другими соединениями типа rdp или ssh. Другое дело что я не хочу постоянно прописывать сокс в фаерфоксе например.

justin_case
() автор топика
Ответ на: комментарий от justin_case

А зачем встроенный в реммину браузер если можно в обычном смотреть?

Постоянно прописывать не надо, тут целых два решения.

1) создай отдельный профиль фф для него

2) прокинь 80 или 443 порт нужного сайта с помощью ssh -L 127.0.0.123:443:1.2.3.4:443 и пропиши его в hosts на айпи 127.0.0.123

firkax ★★★★★
()
Ответ на: комментарий от firkax

А тут уже вопрос зачем нужна реммина. У меня там не только вебморды, но как бы все под рукой в одном флаконе. Прокидывать пробовал, но это именно та рутина от которой я хочу уйти. (оно еще спросит пароль от ключа, оно еще забудется в хистори если долго не юзать, оно еще будет ругаться на несответствие сертификата имени хоста при пробросе и не пустит если это например вмварь). С ремминой просто кнопочку одну нажал и вот готово, порой можно даже пароли не вводить.

justin_case
() автор топика
Ответ на: комментарий от monkdt

Жопалуйста

Я предполагаю ты понимаешь о чем речь как выглядит страница настройки соединения браузера в реммине и тоже хочешь заходить на внутренние вебморды из внешнего интернета. Я предполагаю что у тебя русский язык интерфейса, потому что у меня так и я не буду ради тебя включать английский. В <скобках> я пишу то что ты должен заменить на своё конкретное. Тогда


1. URL - пишешь ровно такое как если бы ты сидел во «внутренней сети», никаких отличий. Естественно это подразумевает что твой ssh шлюз использует внутренний ДНС

2. На вкладке Поведение -> Выполнить команду

Перед соединением: ssh -f -N -D 8888 -M -S /tmp/.<любоеимяфайла> <user>@<ssh-proxy-server>

После соединения: ssh -S /tmp/.<тожесамоеимяфайла> -O exit <user>@<ssh-proxy-server>

Если нестандартный порт ssh то добавить -p <порт> в каждую команду.

Всё - сохранить, поперчить, посолить и подавать к столу.

justin_case
() автор топика
Ответ на: комментарий от justin_case

Причём тут пароль от ключа? Его ssh либо спрашивает, либо не спрашивает, реммина/браузер на это никак не влияют.

Чтобы не забывалось в хистори - отдельный профиль или закладка. Лучше профиль для общей безопасности, и заблочить в нём всё постороннее.

С именем хоста тоже не понял, это то к чему? В hosts прописываешь настоящее имя на прокинутый айпи и всё.

порой можно даже пароли не вводить.

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

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

Идея ровно в том чтобы всего этого НЕ делать. Чтобы кнопку нажал и запустилось без ебли стоя в гамаке. Все рецепты с пробросом порта и с прописыванием в хостах я пробовал и они мне не понравились именно своей трудоемкостью. Рутину - автоматизировать, трудность - механизировать. Что касается безопасности, так это мой личный непереносной комп и если к нему вдруг появится физический доступ посторонних, то пароли это будет наименьшая из моих проблем. Впрочем я никого не заставляю делать так же.

justin_case
() автор топика
Ответ на: комментарий от justin_case

Я так и не понял где ты нашёл трудоёмкость. На ssh ставишь ключ, ssh -L ставишь в автозапуск с перезапуском при падении коннекта (while true; do ssh -L 127.0.0.100:443:1.2.3.4:443 user@proxy.server; sleep 1; done), адрес сайта прописываешь в hosts (127.0.0.100 private.site.name) и пользуешься им как обычно. Никакие пароли тут участвовать не будут.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)
Ответ на: комментарий от firkax

Сокс работает как прокся на вообще все, а проброс - только конкретный какой сделаешь. Не все там 443 и не все 80. С проксей мне достаточно знать только url, если там редирект на хитрожопый порт, все прокатит. Опять же нет смысла в постоянном поднятии туннеля, он может НЕ пригождаться неделями.

justin_case
() автор топика