Забавно, как иногда идёт наша жизнь. Я не работал с Plumbum практически с их майского релиза, и вдруг такие быстрые изменения. Версия 1.0 вышла не так давно, в этом месяце, за ней последовала версия 1.0.1, куда была добавлена поддержка PuTTY на Windows и исправлены некоторые ошибка, и вот теперь я счастлив представить версию 1.1, которая уже почти на носу (запланирована в середине ноября). В этом релизе будет добавлена поддержка Paramiko.
До сих пор Plumbum полагался на внешний SSH клиент,установленный на вашей машине, который он запускал каждый раз, когда Вы хотели запустить удалённый процесс. Этот подход прост, но требует дополнительных затрат на установку нового SSH соединения каждый раз (обмен ключами и т.д.). Используя Paramiko, Plumbum теперь создаёт всего один сокет, через который порождает процессы в различных каналах (channels - фишка SSH) - так что хотя мы и имеем дело с реализацией SSH на Python, всё это работает значительно быстрее чем при использовании множественных удалённых процессов. И, в качестве бонуса, мы получаем дешёвое перенаправление сокета - мы просто устанавливаем
direct-tcpip
канал (который ведёт себя как обычный сокет), который безопасно передаётся нижележащим SSH.
Это позволяет проще взаимодействовать с RPyC: просто запустите RPyC сервер на удалённой машине, привяжите его к
localhost
(так что он не будет принимать внешние подключения). Затем создайте экземпляр ParamikoMachine
, подключённый к этому хосту (передав ключ или пароль при необходимости), и вызовите метод connect_sock
этого объекта:>>> import rpyc
>>> from plumbum.paramiko_machine import ParamikoMachine
>>>
>>> m = ParamikoMachine("192.168.1.143")
>>> # подключаемся к 192.168.1.143:18812 через SSH
... conn = rpyc.classic.connect_stream(rpyc.SocketStream(m.connect_sock(18812)))
>>> conn.modules.sys.platform
'linux2'
>>> m.close()
>>> conn.modules.sys.platform
Traceback (most recent call last):
...
EOFError: [Errno 9] Bad file descriptor
Не забывайте, что этот интерфейс ещё не стабилен и может измениться к официальному релизу. Кроме того, похоже что RPyC 3.3 добавит какую-то встроенную поддержку этого, так что следите за новостями!
Комментариев нет:
Отправить комментарий