Chuyển một đường hầm HTTP CONNECT đã thiết lập cho Paramiko
Kết nối Paramiko qua tuyến HTTP CONNECT được cấp phép trong khi vẫn giữ xác minh khóa máy chủ SSH.
Sau khi một trình trợ giúp HTTP CONNECT trả về một đường hầm tới máy chủ SSH dự định, hãy đưa luồng đó cho 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.Thay máy chủ ví dụ và tải dữ liệu known-hosts chính xác của triển khai. tunnel phải đã dẫn tới cùng máy chủ đó. Tên máy chủ được truyền cho connect xác định khóa máy chủ SSH, không phải proxy.
Giao diện sock chấp nhận một socket đang mở hoặc một đối tượng giống socket. Nó không thương lượng HTTP thay bạn. Trước khi trả về, trình kết nối phải:
- Kết nối tới proxy và gửi một yêu cầu CONNECT hợp lệ cho đích.
- Hoàn tất mọi xác thực proxy được hỗ trợ và xác nhận trạng thái đường hầm thành công.
- Đọc toàn bộ phần tiêu đề proxy, xử lý các lần đọc một phần và giữ lại các byte vượt ranh giới.
- Giới hạn việc thiết lập và đóng các socket bị từ chối/lỗi qua đường dọn dẹp của nó.
Hãy dùng một trình kết nối được duy trì cho công việc đó. Việc tìm một cụm từ thành công tiếng Anh trong một bộ đệm nhận sẽ bỏ sót các dòng trạng thái bị chia tách, văn bản lý do thay đổi và tiêu đề không đầy đủ. Một kết nối TCP proxy thành công không phải là đường hầm SSH được chấp nhận.
Proxy phải cho phép cổng SSH được yêu cầu; quyền duyệt web không thiết lập quyền truy cập CONNECT tới cổng 22. 407 xảy ra trước khi đăng nhập SSH, trong khi lỗi tài khoản SSH xảy ra sau đường hầm. Hãy tách riêng các tài khoản đó.
Đóng ứng dụng khách SSH và các tài nguyên do trình kết nối sở hữu khi hoàn tất. Việc một tác vụ dừng đọc không tự đóng một kết nối đang sống.