Сценарии с люком 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 вы получите сообщение об ошибке "Ошибка оболочки на канале".