Có cách nào để có biểu thức chính quy trong ~ / .ssh / config


7

Tôi có hai bộ máy chủ. Thử nghiệm trên sản xuất. Tất cả các máy chủ có ip nội bộ. Hiện tại tôi đang sử dụng bí danh để đăng nhập:

Host pro-10
Hostname 192.168.1.10
ProxyCommand ssh production-server nc %h %p

Đối với mỗi máy chủ, tôi cần lặp lại quy tắc này. Tôi đang tìm kiếm một cách biểu hiện regualr để làm điều này?

Host pro-*
Hostname 192.168.1.$1
ProxyCommand ssh production-server nc %h %p

Có cách nào để làm điều này ?

Câu trả lời:


15

Không, ssh không hỗ trợ biểu thức chính quy ssh_config (1)và ví dụ bạn đưa ra không phải là biểu thức chính quy. ssh_config (1)hỗ trợ PATTERNS, tức là bạn có thể xác định một mẫu cho IP của mình, tức là:

Host 192.168.1.*
  ProxyCommand ssh production-server nc %h %p

và bạn sẽ có thể chuyển tiếp cho tất cả các IP nội bộ của bạn. Một giải pháp khác là thêm các mục vào /etc/hostscho các IP cụ thể, nghĩa là:

192.168.1.10 pro10
192.168.1.11 pro11

và tạo một mục trong ~/.ssh/configtệp của bạn :

Host pro1?
  ProxyCommand ssh production-server nc %h %p

cảm ơn về câu trả lời. Mẫu sẽ không hoạt động đối với tôi vì nó là ip nội bộ, vì vậy hệ thống kiểm tra và sản xuất Ip b / s sẽ bị xung đột.
Vivek Goel

2

Tôi không tin rằng một biểu thức chính quy có thể tự động thiết lập cấu hình SSH. Tuy nhiên, bạn sẽ có thể sử dụng vòng lặp for trong Bash để tự động tạo ba dòng trong tệp cấu hình cho mỗi máy chủ. Trong ví dụ này, tôi sẽ giả sử bạn cần tạo các mục cho máy chủ pro-75 đến pro-125.

for i in $(seq 75 125);
do
    echo "Host pro-$i" >> ~/.ssh/config
    echo "Hostname 192.168.1.$i" >> ~/.ssh/config
    echo "ProxyCommand ssh production-server nc %h %p" >> ~/.ssh/config
    echo "\n" >> ~/.ssh/config
done

Điều này sẽ xây dựng một danh sách tất cả các số từ 75 đến 125 và lưu trữ dưới dạng danh sách cho vòng lặp. Sau đó, nó lặp qua từng thành viên trong danh sách và thay thế $ i. Mỗi dòng được gắn vào cuối tệp cấu hình người dùng SSH. Cuối cùng, tôi bao gồm dòng mới để chia nhỏ tập tin cấu hình một chút.

Nếu bạn có các giá trị cụ thể cần thiết trong danh sách, thay vì một phân đoạn số liền kề, thì hãy tạo một danh sách theo cách thủ công, như sau:

1 23 45 67 89

2

Không, không may là không thể. Như bạn có thể đã biết bạn có thể sử dụng bản %hmở rộng, nhưng đó là về nó.

Trong trường hợp của bạn tại sao không sử dụng một forvòng lặp?

for i in {4..10}
do  
  echo -e "Host pro-$i\nHostname 192.168.1.$i\nProxyCommand ssh production-server nc %h %p\n"; >> ~/.ssh/config
done

Tùy chọn duy nhất khác mà tôi có thể đưa ra là, có thể tạo các mục nhập DNS bằng regrec, nếu máy chủ của bạn hỗ trợ điều này và sau đó sử dụng các mục đó.


0

với ProxyCommand là có thể - bởi vì nó chỉ là một tập hợp các lệnh shell:

Máy chủ pro- *
ProxyCommand ssh sản xuất-máy chủ nc 192.168.1.`echo "% h" | perl -pe 's / pro - //' `% p

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.