Git Product home page Git Product logo

Comments (22)

melezhik avatar melezhik commented on August 16, 2024

Это бага sparrow, я с подобным поведением уже сталкивался. Не могу сказать в точности в чем дело. Нужно дебажить, разбираться.

from sparrow.

melezhik avatar melezhik commented on August 16, 2024

Впринципе место в коде, где это происходит мне известно, попробую вечером сегодня посмотреть.

from sparrow.

melezhik avatar melezhik commented on August 16, 2024

Попробуйте вот этот плагин запустить - https://sparrowhub.org/info/ssh-test1 он реализует второй случай ( зайти по ssh на 127.0.0.1 и запусить команду ls ) - у меня он при запуске не виснет, а у вас?

from sparrow.

melezhik avatar melezhik commented on August 16, 2024

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

from sparrow.

spigell avatar spigell commented on August 16, 2024

Нет, не виснет. Зависает только если, запускать например bash - ssh 127.0.0.1 'bash', т.е. прыгнуть в другой процесс на хосте, но это не страшно, так в принципе и должно быть. Второй пример просто показывает то, что sparrow делает ssh с очень куцым шелом. Решается, если запустить bash c ключом -l.

Sshuttle скорее всего делает ssh соединение и держит его, но у него есть опция, чтобы он уходил в фон. Sparrow продолжает действительно дальше делать скприпт, но вот в конце консоль не отдает. Вот это немного непонятно.
Вот пример

[spigell@puppet_sparrow-test sshuttle]$ strun --param host=193.124.178.59 --param subnet=192.168.23.0 --param netmask=24 --param check_ip=192.168.23.1 --debug 2
make cache dir: /home/spigell/.outthentic/tmp/2633/story-0
configuration populated and saved to /home/spigell/.outthentic/tmp/2633/story-0/config.json
project: /home/spigell/sshuttle
story: /home/spigell/sshuttle
story_type: upstream
debug: 2
ignore story errors: 0

[s] at 2017-02-23 17:44:07
execute scenario: bash -c 'source /home/spigell/.outthentic/tmp/2633/story-0/glue.bash && source /usr/local/share/perl5/auto/share/dist/Outthentic/outthentic.bash && source /home/spigell/sshuttle/story.bash'
+++ config host
+++ perl -MOutthentic::Glue::Bash -e json_var /home/spigell/.outthentic/tmp/2633/story-0/config.json host
++ host=193.124.178.59
+++ config subnet
+++ perl -MOutthentic::Glue::Bash -e json_var /home/spigell/.outthentic/tmp/2633/story-0/config.json subnet
++ subnet=192.168.23.0
+++ config netmask
+++ perl -MOutthentic::Glue::Bash -e json_var /home/spigell/.outthentic/tmp/2633/story-0/config.json netmask
++ netmask=24
+++ config user
+++ perl -MOutthentic::Glue::Bash -e json_var /home/spigell/.outthentic/tmp/2633/story-0/config.json user
++ user=spigell
+++ config check_ip
+++ perl -MOutthentic::Glue::Bash -e json_var /home/spigell/.outthentic/tmp/2633/story-0/config.json check_ip
++ check_host=192.168.23.1
++ sshuttle -v -D -r [email protected] 192.168.23.0/24
Starting sshuttle proxy.
Listening on ('127.0.0.1', 12300).
c : connecting to server...
[email protected]'s password: 
c : connected.
Connected.
++ sleep 5
++ printf 'HTTP/1.1 200 OK\r\n\r\ncool, thanks'
++ nc 192.168.23.1 -v
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connected to 192.168.23.1:31337.
Ncat: 31 bytes sent, 0 bytes received in 0.07 seconds.
++ echo 'Connection established'
Connection established
++ exit 0 # это последняя строка. Он должен выйти из скрипта и сделать check.


No way!!! 
^CSTATUS	FAILED (2)

Не очень понятно, на чьей стороне неполадка.

from sparrow.

melezhik avatar melezhik commented on August 16, 2024

Второй пример просто показывает то, что sparrow делает ssh с очень куцым шелом

Вот здесь не очень понимаю. Ведь sparrow сам по себе ничего не знает про настройки ssh/bash , они все определяются в вашем конкретном плагине. Так?


Sshuttle скорее всего делает ssh соединение и держит его, но у него есть опция, чтобы он уходил в фон. Sparrow продолжает действительно дальше делать скприпт, но вот в конце консоль не отдает. Вот это немного непонятно.

Mне бы это дело как-нибудь у себя воспроизвести, не объясните как? Я просто с sshuttle дело не имел, у вас же есть код плагина или сьюта?

from sparrow.

spigell avatar spigell commented on August 16, 2024

Поставьте sshuttle и netcat
Да, можете попробовать - https://github.com/Spigell/sparrow-sshuttle
Можете запускать strun без параметров. Самое главное, чтобы во время проверки не было запущен sshuttle. Иначе он скажет, что уже запущен и все будет в порядке.

from sparrow.

melezhik avatar melezhik commented on August 16, 2024

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

from sparrow.

melezhik avatar melezhik commented on August 16, 2024

Попробуйте обновить Outthentic из git , баг должен пропасть:

cpanm https://github.com/melezhik/outthentic.git

По крайней мере у меня sparrow-sshuttle теперь не зависает

from sparrow.

spigell avatar spigell commented on August 16, 2024

Да, действительно, сейчас не зависает, если запустить strun без параметов (я подразумеваю, что 192.168.0.0 cеть у вас доступна). Но если запустить вот так strun --param check_ip=192.168.23.1 --param subnet=192.168.23.0 ( в моем случае хост до сети 192.168.23.0 никак не доребется), то он все равно зависает.

[spigell@puppet_sparrow-test sshuttle]$ time strun --param check_ip=192.168.23.1 --param subnet=192.168.23.0 --debug 2
make cache dir: /home/spigell/.outthentic/tmp/4762/story-0
configuration populated and saved to /home/spigell/.outthentic/tmp/4762/story-0/config.json
project: /home/spigell/sshuttle
story: /home/spigell/sshuttle
story_type: upstream
debug: 2
ignore story errors: 0

[s] at 2017-02-25 02:07:50
execute scenario: bash -c 'source /home/spigell/.outthentic/tmp/4762/story-0/glue.bash && source /usr/local/share/perl5/auto/share/dist/Outthentic/outthentic.bash && source /home/spigell/sshuttle/story.bash'
[email protected]'s password: 
1
2
3
4
5
6

7
8
0
10
seconds






^C
Connected.
+++ config host
+++ perl -MOutthentic::Glue::Bash -e json_var /home/spigell/.outthentic/tmp/4762/story-0/config.json host
++ host=127.0.0.1
+++ config subnet
+++ perl -MOutthentic::Glue::Bash -e json_var /home/spigell/.outthentic/tmp/4762/story-0/config.json subnet
++ subnet=192.168.23.0
+++ config netmask
+++ perl -MOutthentic::Glue::Bash -e json_var /home/spigell/.outthentic/tmp/4762/story-0/config.json netmask
++ netmask=24
+++ config user
+++ perl -MOutthentic::Glue::Bash -e json_var /home/spigell/.outthentic/tmp/4762/story-0/config.json user
++ user=spigell
+++ config check_ip
+++ perl -MOutthentic::Glue::Bash -e json_var /home/spigell/.outthentic/tmp/4762/story-0/config.json check_ip
++ check_host=192.168.23.1
++ sshuttle -v -D -r [email protected] 192.168.23.0/24
Starting sshuttle proxy.
Listening on ('127.0.0.1', 12300).
c : connecting to server...
c : connected.
++ sleep 3
++ nc 192.168.23.1 -v
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connected to 192.168.23.1:31337.
++ printf '\r\n\r\ncool, thanks'
++ [[ '' == 0 ]]
++ exit 1
not ok	scenario succeeded
end of story: /home/spigell/sshuttle
STATUS	FAILED (256)

real	0m24.009s
user	0m0.339s
sys	0m0.053s

outthentic ставил из гита. Заметил новую зависимость tiny.

from sparrow.

melezhik avatar melezhik commented on August 16, 2024

Приветствую.
Capture::Tiny - это модуль который я использую для вызова внешних программ и парсинга ответа от них. Он вроде как решает проблемы с "зависающими" процессами

Но если запустить вот так strun --param check_ip=192.168.23.1 --param subnet=192.168.23.0 ( в моем случае хост до сети 192.168.23.0 никак не доберется), то он все равно зависает.

А если запустить все тоже самое руками, не через strun ? Sshutle может достучаться до хоста? Запустите, пож-та руками и отпишите вывод

from sparrow.

melezhik avatar melezhik commented on August 16, 2024

А еще было бы здорово знать с какими параметрами мне запустить что бы потестировать ? У вас то хост 92.168.23.1 и subnet 92.168.23.0 я насколько понимаю реальные?
Я например мог бы потестировать все для хоста sparrowhub.org , какие в этом случае должные быть параметры check_ip, subnet?

from sparrow.

spigell avatar spigell commented on August 16, 2024

Из вывода последнего запуска strun (см выше) видно команду:

[spigell@puppet_sparrow-test sshuttle]$ sshuttle -v -D -r [email protected] 192.168.23.0/24
Starting sshuttle proxy.
Listening on ('127.0.0.1', 12300).
c : connecting to server...
[email protected]'s password: 
[email protected]'s password: 
c : connected.
Connected.
[spigell@puppet_sparrow-test sshuttle]$

sshuttle сделал соединение с локалхостом, а то что сеть 192.168.0.23/24 недоступна не важно должно быть.
Тут дело в netcat теперь, я сразу не увидел.

Давайте до завтра подождем. Скорее всего, я просто netcat не то скормил.

from sparrow.

spigell avatar spigell commented on August 16, 2024

нет, сети не реальные. Просто любая сеть, куда не может попасть хост. Check_ip = это хост, который вы проверяете netcat, когда сделали соединение (icmp часто не прокидывается sshuttle).

Похоже, да, это в плагине проблема. Я его написал для проверки вчера и не особо разбирался как закрыть nc правильно.
Давайте закроем вопрос насчет sshutle. Сейчас не залипает - это главное.
Спасибо.

from sparrow.

melezhik avatar melezhik commented on August 16, 2024

Хорошо, вас понял. Здорово , что получилось на вашем кейсе баг закрыть этот неприятный. Я давно ломал голову насчёт этого. Сейчас я использую сторонний модуль captures::tiny , он более корректно реализует работу с IPC, чем старый код. Спасибо что помогли.

Через какое то время выкачу новую версию Outthentic в релиз на CPAN

from sparrow.

melezhik avatar melezhik commented on August 16, 2024

выложил на CPAN, в версии 0.2.27 - https://metacpan.org/changes/distribution/Outthentic

from sparrow.

melezhik avatar melezhik commented on August 16, 2024

Я тут сделал небольшое исследование насчет sshutle и выглядет так что у него некорректная демонизация, возможно поэтому он вызывал зависание в sparrow. Я пока ничего не утверждаю, но я запостил тикет разработчикам sshutle - sshuttle/sshuttle#139 и жду от них ответа, если выяснится, что баг на их стороне, я планирую поменять реализацию запуска внешних комманд в outthentic.

Та, которая сейчас не позволяет выводить stdout/stderr от внешней команды в режиме реального времени. На это пришлось пойти что бы решить проблему с зависание при работе со sshutle.

Так что как выяснится что проблема была не в Sparrow, я планирую отревертить изменения сделанные в Outthentic р рамках данного тикета и попрошу вас обновить sshutle ( версия в которой я надеюсь его разработчики решат проблему с демонизацией ), и сам Sparrow и убедится что sparrow-sshutle плагин работает без зависаний.

from sparrow.

spigell avatar spigell commented on August 16, 2024

Тоже наблюдаю. А можете пояснить, как добавление capture::tiny повляло на вывод stoout/stderr в реальном времени? Чисто для справки.
Если честно, мне вывод в реальном времени в одном своем плагине критичен. Хотелось бы его вернуть.

from sparrow.

melezhik avatar melezhik commented on August 16, 2024

Когда обнаружилось зависание с sshutle я стал искать решения. До этого я использовал стандартную для perl конструкцию с открытие внешней программы через функцию open и с течение всего вывода через линукс pipe. Capture::Tiny впринципе делает тоже самое , только с вариациями . Этот модуль экспортирует несколько функций для конечного прльзователя. Та, которую мы сейчас используем это Capture::Tiny::capture , по каким-то причинам ( я не стал разбираться почему, там нужно копаться в реализации, а она непростая ) она не виснет при работе с sshutle , на не умеет отдавать данные из stdout, stderr внешней программы в режиме реального времени, я это уже понял позже , после релиза.

Так как скорее всего судя по тому что недавно написали разработчики sshutle в тикете - бага на стороне sshutle , я отреверчу изменения ( или буду использовать функцию Capture::Tiny::tee, котораяотдает данные в realtime ) .

К вам тогда вопрос - вы готовы подождать с использованием sshutle в плагине Sparrow , пока разработчики не пофиксят баг ?

from sparrow.

spigell avatar spigell commented on August 16, 2024

Да, готов подождать.

from sparrow.

melezhik avatar melezhik commented on August 16, 2024

Ок. Вернул realtime режим:

$ cpanm https://github.com/melezhik/outthentic.git

Или как обычно

$ sparrowdo sparrowdo --host=127.0.0.1 --module_run=Sparrow::Update

from sparrow.

spigell avatar spigell commented on August 16, 2024

Работает.

from sparrow.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.