تمرير نفق HTTP CONNECT القائم إلى Paramiko
اربط Paramiko عبر مسار HTTP CONNECT مصرّح به مع الحفاظ على التحقق من مفتاح مضيف SSH.
بعد أن يعيد مساعد HTTP CONNECT نفقًا إلى خادم SSH المقصود، سلّم ذلك التدفق إلى Paramiko:
with paramiko.SSHClient() as client:
client.load_system_host_keys()
client.connect('ssh.example.com',
username='operator',
sock=tunnel,
banner_timeout=10,
auth_timeout=10)
# Use the verified SSH connection.استبدل المضيف في المثال وحمّل بيانات known-hosts الصحيحة للنشر. يجب أن يؤدي tunnel مسبقًا إلى الخادم نفسه. اسم المضيف الذي يُمرّر إلى connect يحدّد مفتاح مضيف SSH، لا الوكيل.
تقبل واجهة sock مقبسًا مفتوحًا أو كائنًا شبيهًا بالمقبس. وهي لا تتفاوض على HTTP نيابةً عنك. قبل إعادته، يجب على الموصّل أن:
- يتصل بالوكيل ويرسل طلب CONNECT صالحًا للوجهة.
- يكمل أي مصادقة وكيل مدعومة ويتحقق من حالة نفق ناجحة.
- يقرأ قسم ترويسات الوكيل بالكامل، مع التعامل مع القراءات الجزئية والحفاظ على البايتات التي تتجاوز الحد.
- يحدّ إعداد المقابس المرفوضة/الخاطئة ويغلقها عبر مسار التنظيف الخاص به.
استخدم موصّلًا مُصانًا لهذا العمل. البحث في مخزن استقبال واحد عن عبارة نجاح إنجليزية يفوّت أسطر الحالة المنقسمة ونصوص الأسباب المتغيرة والترويسات غير المكتملة. اتصال TCP ناجح بالوكيل ليس نفق SSH المقبول.
يجب أن يسمح الوكيل بمنفذ SSH المطلوب؛ إذ لا تمنح صلاحية تصفح الويب وصول CONNECT إلى المنفذ 22. يحدث خطأ 407 قبل تسجيل دخول SSH، بينما يحدث فشل حساب SSH بعد النفق. أبقِ هذين الحسابين منفصلين.
أغلق عميل SSH والموارد التي يملكها الموصّل عند الانتهاء. توقّف مهمة عن قراءاتها لا يغلق بحد ذاته اتصالًا حيًا.