Comments (22)
Это бага sparrow, я с подобным поведением уже сталкивался. Не могу сказать в точности в чем дело. Нужно дебажить, разбираться.
from sparrow.
Впринципе место в коде, где это происходит мне известно, попробую вечером сегодня посмотреть.
from sparrow.
Попробуйте вот этот плагин запустить - https://sparrowhub.org/info/ssh-test1 он реализует второй случай ( зайти по ssh на 127.0.0.1 и запусить команду ls ) - у меня он при запуске не виснет, а у вас?
from sparrow.
Я думаю что как в случае с sshuttle так с просто ssh проблема одна и та же , но для простоты давайте попробуем воспроизвести баг на обычной ssh сессии.
from sparrow.
Нет, не виснет. Зависает только если, запускать например 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.
Второй пример просто показывает то, что sparrow делает ssh с очень куцым шелом
Вот здесь не очень понимаю. Ведь sparrow сам по себе ничего не знает про настройки ssh/bash , они все определяются в вашем конкретном плагине. Так?
Sshuttle скорее всего делает ssh соединение и держит его, но у него есть опция, чтобы он уходил в фон. Sparrow продолжает действительно дальше делать скприпт, но вот в конце консоль не отдает. Вот это немного непонятно.
Mне бы это дело как-нибудь у себя воспроизвести, не объясните как? Я просто с sshuttle дело не имел, у вас же есть код плагина или сьюта?
from sparrow.
Поставьте sshuttle и netcat
Да, можете попробовать - https://github.com/Spigell/sparrow-sshuttle
Можете запускать strun без параметров. Самое главное, чтобы во время проверки не было запущен sshuttle. Иначе он скажет, что уже запущен и все будет в порядке.
from sparrow.
удалось воспроизвести у себя на машине баг, буду смотреть.
from sparrow.
Попробуйте обновить Outthentic из git , баг должен пропасть:
cpanm https://github.com/melezhik/outthentic.git
По крайней мере у меня sparrow-sshuttle теперь не зависает
from sparrow.
Да, действительно, сейчас не зависает, если запустить 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.
Приветствую.
Capture::Tiny - это модуль который я использую для вызова внешних программ и парсинга ответа от них. Он вроде как решает проблемы с "зависающими" процессами
Но если запустить вот так strun --param check_ip=192.168.23.1 --param subnet=192.168.23.0 ( в моем случае хост до сети 192.168.23.0 никак не доберется), то он все равно зависает.
А если запустить все тоже самое руками, не через strun
? Sshutle может достучаться до хоста? Запустите, пож-та руками и отпишите вывод
from sparrow.
А еще было бы здорово знать с какими параметрами мне запустить что бы потестировать ? У вас то хост 92.168.23.1 и subnet 92.168.23.0 я насколько понимаю реальные?
Я например мог бы потестировать все для хоста sparrowhub.org , какие в этом случае должные быть параметры check_ip, subnet?
from sparrow.
Из вывода последнего запуска 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.
нет, сети не реальные. Просто любая сеть, куда не может попасть хост. Check_ip = это хост, который вы проверяете netcat, когда сделали соединение (icmp часто не прокидывается sshuttle).
Похоже, да, это в плагине проблема. Я его написал для проверки вчера и не особо разбирался как закрыть nc правильно.
Давайте закроем вопрос насчет sshutle. Сейчас не залипает - это главное.
Спасибо.
from sparrow.
Хорошо, вас понял. Здорово , что получилось на вашем кейсе баг закрыть этот неприятный. Я давно ломал голову насчёт этого. Сейчас я использую сторонний модуль captures::tiny , он более корректно реализует работу с IPC, чем старый код. Спасибо что помогли.
Через какое то время выкачу новую версию Outthentic в релиз на CPAN
from sparrow.
выложил на CPAN, в версии 0.2.27 - https://metacpan.org/changes/distribution/Outthentic
from sparrow.
Я тут сделал небольшое исследование насчет sshutle и выглядет так что у него некорректная демонизация, возможно поэтому он вызывал зависание в sparrow. Я пока ничего не утверждаю, но я запостил тикет разработчикам sshutle - sshuttle/sshuttle#139 и жду от них ответа, если выяснится, что баг на их стороне, я планирую поменять реализацию запуска внешних комманд в outthentic.
Та, которая сейчас не позволяет выводить stdout/stderr от внешней команды в режиме реального времени. На это пришлось пойти что бы решить проблему с зависание при работе со sshutle.
Так что как выяснится что проблема была не в Sparrow, я планирую отревертить изменения сделанные в Outthentic р рамках данного тикета и попрошу вас обновить sshutle ( версия в которой я надеюсь его разработчики решат проблему с демонизацией ), и сам Sparrow и убедится что sparrow-sshutle плагин работает без зависаний.
from sparrow.
Тоже наблюдаю. А можете пояснить, как добавление capture::tiny повляло на вывод stoout/stderr в реальном времени? Чисто для справки.
Если честно, мне вывод в реальном времени в одном своем плагине критичен. Хотелось бы его вернуть.
from sparrow.
Когда обнаружилось зависание с sshutle я стал искать решения. До этого я использовал стандартную для perl конструкцию с открытие внешней программы через функцию open и с течение всего вывода через линукс pipe. Capture::Tiny впринципе делает тоже самое , только с вариациями . Этот модуль экспортирует несколько функций для конечного прльзователя. Та, которую мы сейчас используем это Capture::Tiny::capture , по каким-то причинам ( я не стал разбираться почему, там нужно копаться в реализации, а она непростая ) она не виснет при работе с sshutle , на не умеет отдавать данные из stdout, stderr внешней программы в режиме реального времени, я это уже понял позже , после релиза.
Так как скорее всего судя по тому что недавно написали разработчики sshutle в тикете - бага на стороне sshutle , я отреверчу изменения ( или буду использовать функцию Capture::Tiny::tee, котораяотдает данные в realtime ) .
К вам тогда вопрос - вы готовы подождать с использованием sshutle в плагине Sparrow , пока разработчики не пофиксят баг ?
from sparrow.
Да, готов подождать.
from sparrow.
Ок. Вернул realtime режим:
$ cpanm https://github.com/melezhik/outthentic.git
Или как обычно
$ sparrowdo sparrowdo --host=127.0.0.1 --module_run=Sparrow::Update
from sparrow.
Работает.
from sparrow.
Related Issues (20)
- plg man for private plugins HOT 3
- dependencies for bash and python plugins. HOT 28
- --silent or --quiet flag for all sparrow command HOT 12
- Sparrow task configuration HOT 6
- Issue with remote tasks HOT 1
- Sparrow doesn't get all string of parameters, but strun does HOT 4
- Problem with sparrow.list HOT 14
- Changing all sparrow plugins to be compatible with Outthentic >= 0.3.0 HOT 5
- Add changes log on Sparrowhub HOT 2
- Pre-install tasks for plg install HOT 1
- add parameter supported_os in sparrow.json
- Docs about sparrow.yaml
- Update bootstrap script. Sparrowhub.org HOT 1
- Add yaml support for boxes HOT 5
- Incompatible with perl 5.26 ~ HOT 3
- SparrowHub trouble HOT 1
- Request for python support HOT 6
- sshd-check plugin doesn't work now HOT 2
- logging in sparrow client HOT 29
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from sparrow.