Làm cách nào tôi có thể khớp phạm vi CIDR cho mục nhập máy chủ cấu hình SSH?


22

Tôi đang tìm cách sử dụng các khối CIDR cụ thể để khớp với các máy chủ trong cấu hình máy khách SSH (thường ~/.ssh/config). Ví dụ: tôi có một mục để chuyển tiếp tất cả lưu lượng truy cập thông qua máy chủ pháo đài nếu IP rơi vào một phạm vi nhất định, giả sử 10.1.0.0/16:

host 10.1.*
    proxycommand ssh -q bastion -W %h:%p

Điều này hoạt động rất tốt, nhưng khi tôi thêm một số phạm vi không phù hợp với ký hiệu chấm chính xác thì sao?

# doesn't work, unfortunately
host 10.2.0.0/18
    proxycommand ssh -q bastion-foo -W %h:%p
host 10.2.64.0/18
    proxycommand ssh -q bastion-bar -W %h:%p

Có điều gì đó trong hướng dẫn mà tôi đã bỏ lỡ hoặc một mẹo tạo kịch bản thông minh có thể cho phép khớp các dải IP máy chủ này không?

Câu trả lời:


24

Việc khớp với các mẫu trong tệp ssh_config được thực hiện dưới dạng khớp mẫu cơ bản, không phải là so khớp mạng / CIDR. Vì vậy, sử dụng ký hiệu CIDR sẽ không hoạt động.

Các trang người đàn ông giải thích rằng:

Một mẫu bao gồm 0 hoặc nhiều ký tự không phải khoảng trắng, *(ký tự đại diện khớp với 0 hoặc nhiều ký tự) hoặc ?(ký tự đại diện khớp chính xác với một ký tự).

Điều tốt nhất bạn có thể làm là sử dụng một danh sách nhiều hơn một mẫu. Một lần nữa, từ trang hướng dẫn:

Danh sách mẫu là danh sách các mẫu được phân tách bằng dấu phẩy. Các mẫu trong danh sách mẫu có thể bị phủ định bằng cách đặt trước chúng bằng dấu chấm than ( !).

Vì vậy, để bao gồm hai / 18 lưới của bạn, bạn cần liệt kê:

  • tất cả các máy chủ phù hợp 10.2.?.*(ví dụ 10.2.0.01010.9.9.255)
  • tất cả các máy chủ phù hợp 10.2.??.*(ví dụ 10.2.10.01010.99.99.255)
  • tất cả các máy chủ phù hợp 10.2.10?.*(ví dụ 10.2.100.0 Hay10.2.109.255)
  • tất cả các máy chủ phù hợp 10.2.11?.*(ví dụ 10.2.110.0 Hay10.2.119.255)
  • tất cả các máy chủ phù hợp 10.2.12?.*NGOẠI TRỪ những máy chủ phù hợp 10.2.128.*10.12.129.*(và hãy nhớ rằng việc loại trừ phải đến trước!)

Danh sách mẫu của bạn sẽ trông như thế này:

Host "10.2.?.*","10.2.??.*", "10.2.10?.*","10.2.11?.*","!10.2.128.*","!10.2.129.*","10.2.12?.*"

4
Nói chính xác, đây không phải là một biểu thức thông thường, nó là một ký tự đại diện.
Gabor Garami

1
Cảm ơn câu trả lời, nó gần như hoạt động với tôi nhưng tôi thực sự cần phải phân biệt hai phạm vi đó với hostcác mục riêng biệt . Nó cũng cần mỗi cái được trích dẫn riêng (ssh / Mac). Ngắn nhất tôi có thể tìm thấy: host "10.2.?.*", "10.2.??.*", "!10.2.64*", "!10.2.65*", "!10.2.66*", "!10.2.67*", "!10.2.68*", "!10.2.69*", "!10.2.7*", "!10.2.8*", "!10.2.9*"host "10.2.??.*", "10.2.10?.*", "10.2.11?.*", "10.2.12?.*", "!10.2.1?.*", "!10.2.2?.*", "!10.2.3?.*", "!10.2.4?.*", "!10.2.5?.*", "!10.2.60.*", "!10.2.61.*", "!10.2.62.*", "!10.2.63.*", "!10.2.128.*", "!10.2.129.*"
fazy

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.