انتقال یک تونل 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 و منابع تحت مالکیت اتصالدهنده را ببندید. توقف خواندنهای یک وظیفه بهخودیخود یک اتصال زنده را نمیبندد.