Chỉ áp dụng từ khóa Khớp với Máy chủ duy nhất trong cấu hình ssh


8

Tôi có một máy chủ mà tôi ssh vào. Đôi khi tôi ở trong cùng một mạng và có thể ssh trực tiếp vào mạng, những lần khác tôi ở ngoài mạng và tôi cần sử dụng proxy.

Vì ssh qua máy chủ proxy chậm hơn nhiều so với trực tiếp, tôi muốn cài đặt cấu hình ssh của mình sao cho tôi cố gắng kết nối trực tiếp, quay lại proxy nếu thất bại.

Hiện tại cấu hình trông như sau:

    Host proxy_server
    User user
    Port port
    Hostname some_domain

    Host target_host
    User user
    Port port
    Hostname ip_addr_of_host
    Match exec not_inside_network
    ProxyCommand ssh -W %h:%p proxy_server

Các target_hostentry là mục cuối cùng trong tập tin cấu hình của tôi, nhưng not_inside_networkđược gọi bởi bất kỳ kết nối ssh đến các máy chủ không liên quan trong tập tin cấu hình. Làm thế nào tôi có thể Matchchỉ áp dụng cho một máy chủ này?


1
cho đến khi ai đó quen thuộc hơn ssh.config, tôi tự hỏi nếu bạn kiểm tra ví dụ ở đây . Có thể hữu ích khi thử mô hình mà tác giả sử dụng cho nhiều máy chủ (nghĩa là một ký tự chính xác và một ký tự đại diện trong trường hợp của bạn).
Simply_Me

Nó không xem xét việc kiểm tra xem máy chủ có thể truy cập được hay không, đó là điều bất thường ở đây.
James Tocknell

Bạn có mệt mỏi khi đặt thẻ hoang dã trước và sau đó chính xác?
Simply_Me

Câu trả lời:


12

Matchlà ngang bằng với Host. Nó không tồn tại như một tập hợp con của Host theo cách mà các tùy chọn khác làm.

Nhưng bạn có thể chỉ định nhiều tiêu chí trên một trận đấu và chúng có vẻ hoạt động dưới dạng AND ngắn mạch. Vì vậy, điều này sẽ có thể và hữu ích cho bạn:

Match host target_host exec not_inside_network
    ProxyCommand ssh -W %h:%p proxy_server

Quy tắc này sẽ được kiểm tra trên mỗi ssh. Nhưng đối với các máy chủ không khớp với "target_host", trận đấu sẽ ngay lập tức thất bại và chuyển sang từ khóa tiếp theo Matchhoặc Hosttừ khóa (nếu có). Chỉ khi máy chủ lưu trữ là "target_host" thì lệnh exec sẽ xảy ra. Sau đó, sự thật của tuyên bố đó sẽ xác định liệu ProxyCommand có được gọi hay không.

Để xem logic xảy ra, hãy chạy với -vvv. Bạn sẽ thấy một số kiểm tra khớp tại debug3.


Tôi đã thử một cái gì đó như thế này, nhưng không thể tìm ra cách kiểm tra xem nó thực sự đang làm những gì tôi mong đợi (nó xuất hiện -vvv là câu trả lời). Bạn có biết rằng ngắn mạch VÀ là một hành động được ghi lại (nó không có trong trang man, tôi đã trải qua vài lần) hoặc một chi tiết thực hiện?
James Tocknell

Tôi nghĩ rằng tôi đã tìm thấy nó trong các ghi chú từ đăng ký. Hãy để tôi xem nếu tôi có thể tìm thấy điều đó một lần nữa
BowlOfRed

Đây có thể là một chi tiết thực hiện, nhưng nó được đề cập rõ ràng trong mã nguồn. Từ servconf.c: "/ * * Tất cả các thuộc tính trên một dòng Kết hợp duy nhất được ANDed với nhau, vì vậy chúng tôi cần * kiểm tra mọi thuộc tính và đặt kết quả về 0 nếu bất kỳ thuộc tính nào * không khớp. * /" Thật không may, điều đó không phù hợp. không đề cập đến việc nó bị đoản mạch ...
BowlOfRed
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.