Отключение SSH-туннеля в Парамико программно - PullRequest
2 голосов
/ 06 мая 2010

Мы пытаемся использовать модуль paramiko для создания SSH-туннелей по требованию к произвольным серверам для запросов к удаленным базам данных. Мы попытались использовать демонстрацию forward.py, поставляемую с paramiko, но существует большое ограничение: не представляется простым способ закрыть туннель SSH и соединение SSH после запуска сервера сокетов.

У нас есть ограничение: мы не можем активировать его из оболочки, а затем вручную убить оболочку, чтобы остановить список. Нам нужно открыть соединение SSH, туннель, выполнить некоторые действия через туннель, закрыть туннель и закрыть соединение SSH в python.

Я видел ссылки на метод server.shutdown (), но не ясно, как правильно его реализовать.

Любая помощь будет принята с благодарностью ...

1 Ответ

5 голосов
/ 06 мая 2010

Я не уверен, что вы имеете в виду под "правильно реализовать" - вам просто нужно отслеживать объект сервера и вызывать shutdown для него, когда вы хотите. В forward.py сервер не отслеживается, потому что последняя строка forward_tunnel равна

ForwardServer(('', local_port), SubHander).serve_forever()

так что серверный объект уже не легко доступен. Но вы можете просто изменить это на, например ::

global theserver
theserver = ForwardServer(('', local_port), SubHander)
theserver.serve_forever()

и запустите функцию forward_tunnel в отдельном потоке, чтобы функция main вернула управление (пока serve_forever работает в указанном отдельном потоке) и может вызывать theserver.shutdown() всякий раз, когда это уместно и необходимо.

...