إيقاف نفق SSH في Paramiko برمجيًا
سؤال
نحن نحاول استخدام وحدة Paramiko لإنشاء أنفاق SSH عند الطلب على الخوادم التعسفية لأغراض الاستعلام عن قواعد البيانات عن بُعد. لقد حاولنا استخدام العرض التجريبي إلى الأمام.
القيد الذي لدينا هو أنه لا يمكننا تفعيل هذا من قذيفة ثم قتل القشرة يدويًا لإيقاف الراتب. نحتاج إلى فتح اتصال SSH ، والنفق ، وإجراء بعض الإجراءات من خلال النفق ، وإغلاق النفق ، وإغلاق اتصال SSH داخل Python.
لقد رأيت إشارات إلى طريقة server.shutdown () ولكن ليس من الواضح كيفية تنفيذها بشكل صحيح.
أي مساعدة سيكون موضع تقدير كبير ...
المحلول
لست متأكدًا مما تقصده بـ "تنفيذها بشكل صحيح" - تحتاج فقط إلى تتبع كائن الخادم والاتصال 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()
كلما كان ذلك مناسبًا ومطلوبًا.