Kết nối SSH của Fabric 2+ qua proxy SOCKS
Dùng cổng ProxyCommand của Fabric với trình kết nối hỗ trợ SOCKS, đồng thời giữ xác thực SSH gắn với đích đến.
Các lệnh từ xa của Fabric di chuyển qua SSH. Để đưa kết nối SSH đó qua một máy chủ SOCKS, hãy cấp cho Fabric một trình kết nối nói SOCKS và trả về luồng byte của đích đến.
API Connection được giới thiệu trong Fabric 2 nhận một chuỗi lệnh làm gateway của nó. Fabric dùng chuỗi đó làm ProxyCommand. Nếu có sẵn nc tương thích OpenBSD hỗ trợ các tùy chọn proxy của nó, cấu hình có thể là:
from fabric import Connection
connection = Connection(
"app.example.net",
user="deploy",
gateway="nc -X 5 -x proxy.example.net:1080 %h %p",
)Ví dụ này dùng cổng SSH thông thường, 22. -X 5 của trình kết nối chọn SOCKS5, còn -x chỉ định điểm cuối của proxy. Các phần giữ chỗ cho máy chủ và cổng cung cấp đích SSH. Với một đích SSH công khai, một điểm cuối không cần xác thực từ danh sách proxy SOCKS5 có thể điền địa chỉ proxy nếu nó cho phép đích và cổng đó. Cấu hình lệnh theo các tùy chọn của trình kết nối thực tế đã cài trên máy; các chương trình tên nc không phải đều cung cấp cùng một giao diện.
Trình kết nối chạy cục bộ, nơi Fabric chạy. Máy chủ ứng dụng không cần trình trợ giúp đó chỉ vì nó là đích SSH. Sau khi luồng được thiết lập, Fabric vẫn thực hiện thương lượng SSH và xác thực tài khoản deploy trên app.example.net. Mọi xác thực mà máy chủ SOCKS yêu cầu thuộc về trình kết nối và phải được nó hỗ trợ.
Fabric cũng có thể đọc ProxyCommand từ cấu hình SSH. Điều đó có thể thuận tiện khi nhiều công cụ SSH dùng cùng một tuyến. Hãy dùng một định nghĩa cổng duy nhất như dự định cho kết nối, thay vì kết hợp cổng kiểu lệnh với một cổng máy chủ nhảy riêng cho cùng đích.
Khi trung gian là một máy chủ SSH
Đối tượng Connection của Fabric được cấp làm gateway mang nghĩa khác: Fabric kết nối tới cổng SSH đó và yêu cầu một kênh tới máy chủ cuối. Hãy dùng dạng đó cho máy chủ nhảy SSH. Một trình lắng nghe SOCKS không phải máy chủ SSH, nên nó cần trình kết nối kiểu lệnh ở trên.
Lựa chọn truyền tải này cũng có một giới hạn rõ ràng. Nó định tuyến kết nối SSH của Fabric. Một lệnh chạy trên máy chủ từ xa mà sau đó tải một kho lưu trữ hoặc gói sẽ tạo một kết nối ra mới từ máy chủ đó, theo cấu hình proxy riêng của chương trình ấy.