Сценарии с люком Twisted

Краткое описание: Невозможно автоматизировать команды в канализационный люк. Ищу решения / советы.

Twisted обладает отличной функциональностью, называемой люком. Он позволяет пользователю подключиться к текущему серверу Twisted и проверить / взаимодействовать с его внутренними компонентами.

Я хотел бы сделать некоторые сценарии с этим. Подключение к люку просто требует

ssh localhost -p 12345

и затем пользователь попадает в интерпретатор Python с доступом к запущенному процессу.

Обычно с помощью ssh можно запустить команду на удаленном сервере и выйти, например:

ssh foo@bar.com 'ls'

выполнит 'ls' в каталоге входа в систему, а затем соединение ssh закроется.

Я хотел бы выполнить что-то вроде

ssh localhost -p 12345 'print "hello, world"'

в люк, но вместо этого я получаю (с ssh verbose):

debug1: Authentication succeeded (password).
debug1: channel 0: new [client-session]
debug1: Entering interactive session.
debug1: Sending environment.
debug1: Sending env LANG = en_US.UTF-8
debug1: Sending command: print "Hello world"
exec request failed on channel 0

В любом случае я могу автоматизировать операции на люке?

1 ответ

Решение

Причина по которой ssh localhost -p 12345 print 'Hello world' сбой в том, что "print 'Hello world'" отправляется как запрос "exec", который должен выполнить команду. Ваш сервер (люк) не поддерживает это (очевидно).

Вместо этого вам нужно ввести стандартный ввод интерпретатора Python. Например:

ssh -tt localhost -p 12345 << EOS
print "Hello world"
EOS

Замечание -tt флаг - он заставляет ssh выделять tty независимо от того, какое устройство ввода не tty. Без -tt вы получите сообщение об ошибке "Ошибка оболочки на канале".

Другие вопросы по тегам