Nhiều mục tương tự trong cấu hình ssh


193

Nói rằng tôi muốn định cấu hình sshtùy chọn của mình cho 30 máy chủ có cùng thiết lập trong .ssh configtệp của mình :

host XXX
     HostName XXX.YYY.com
     User my_username
     Compression yes
     Ciphers arcfour,blowfish-cbc
     Protocol 2
     ControlMaster auto
     ControlPath ~/.ssh/%r@%h:%p
     IdentityFile ~/.ssh/YYY/id_rsa

trong đó điều duy nhất thay đổi giữa 30 máy này là XXX.

Thay vì lặp lại cấu trúc trên 30 lần trong configtệp của tôi , có cách nào khác để xác định một loạt các máy không?

Câu trả lời:


232

Từ ssh_config(5)trang người đàn ông:

 Host    Restricts the following declarations (up to the next Host key‐
         word) to be only for those hosts that match one of the patterns
         given after the keyword.  If more than one pattern is provided,
         they should be separated by whitespace.

...

 HostName
         Specifies the real host name to log into.  This can be used to
         specify nicknames or abbreviations for hosts.  If the hostname
         contains the character sequence ‘%h’, then this will be replaced
         with the host name specified on the commandline (this is useful
         for manipulating unqualified names).

Vì thế:

Host XXX1 XXX2 XXX3
  HostName %h.YYY.com

9
Nó xuất hiện %htính năng xuất hiện trong phiên bản 5.6 của OpenSSH . Tôi đã tự hỏi tại sao tôi chưa từng thấy nó trước đây - phiên bản trong Debian Squeeze là 5.5.
jw013

2
Nếu bạn đang sử dụng HĐH cũ hoặc cần các quy tắc không được hỗ trợ config, bạn luôn có thể viết một tập lệnh đơn giản tạo ra tập lệnh của bạn config.
Roger Dahl

69

Để giảm thiểu thiết lập, bạn có thể có một cái .ssh/confignhư thế này

Host X01
    HostName X01.YYY.com

Host X02
    HostName X02.YYY.com

...

Host X01 X02 ...
     User my_username
     Compression yes
     Ciphers arcfour,blowfish-cbc
     Protocol 2
     ControlMaster auto
     ControlPath ~/.ssh/%r@%h:%p
     IdentityFile ~/.ssh/YYY/id_rsa

Host X01 X02 ...có thể được thay thế bởi Host *nếu mọi máy chủ có cấu hình sau


2
Đây dường như là câu trả lời duy nhất thực sự giúp ích cho OP (và bản thân tôi).
Nhà vật lý điên

Thứ tự ưu tiên là gì? Có phải nó chỉ là thứ được định nghĩa sau trong tệp sẽ ghi đè lên thứ được xác định trước đó trong tệp? Giống như nói rằng tôi đã "Nén không" trong "Máy chủ X01", sau đó có bị ghi đè bằng "Nén có" trong "Máy chủ X01 X02" không?
Nông dân Ben

1
Từ hướng dẫn ssh_config: Vì giá trị thu được đầu tiên cho mỗi tham số được sử dụng, nên khai báo cụ thể hơn cho máy chủ ở gần đầu tệp và mặc định chung ở cuối.
Guillaume Vincent

Có thể Host X01 X02 ...được thay thế bởi *.YYY.com? Điều đó có vẻ hơi dễ quản lý hơn nếu nó hoạt động.
Michael

51

Đơn giản chỉ cần sử dụng *

Xem man ssh_config:

THỰC TRẠ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 '?' (một ký tự đại diện khớp chính xác với một ký tự). Ví dụ: để chỉ định một bộ khai báo cho bất kỳ máy chủ lưu trữ nào trong bộ tên miền .co.uk., có thể sử dụng mẫu sau:

       Host *.co.uk

 The following pattern would match any host in the 192.168.0.[0-9] network range:

       Host 192.168.0.?

 A pattern-list is a comma-separated list of patterns.  Patterns within pattern-lists may be negated by preceding them with an
 exclamation mark (‘!’).  For example, to allow a key to be used from anywhere within an organisation except from the “dialup”
 pool, the following entry (in authorized_keys) could be used:

       from="!*.dialup.example.com,*.example.com"

Cảm ơn! Đó dường như là những gì tôi cần, nhưng tôi vẫn không hiểu làm thế nào để thích ứng với trường hợp của mình. Tôi có sử dụng dấu chấm hỏi ?bất cứ nơi nào tôi muốn thay thế bằng mẫu phù hợp với *dấu không?
Amelio Vazquez-Reina

2
Hừm. Tôi nghĩ rằng các mẫu phục vụ một mục đích khác với những gì tôi cần. Chúng chuyển hướng nhiều truy vấn đến cùng một configmục, nhưng các tham số của Máy chủ được cố định (nghĩa là các mẫu không thể được sử dụng để tạo mẫu cho các tham số). Tôi có lầm không?
Amelio Vazquez-Reina

4
@ user27915816 Vâng, bạn đã đúng, không có cách nào để làm "mẫu" theo như tôi biết. Điều tốt nhất bạn có thể làm là tách các dòng không đổi thành một Host *mục duy nhất và có một mục riêng cho mỗi mục Host XXXchỉ bao gồm các phần khác nhau (ví dụ: Hostname XXX.YYY.ZZZdòng).
jw013

Trang này là kết quả hàng đầu (hiện tại) khi Googling "ssh config wildcards", vì vậy cảm ơn bạn đã cung cấp câu trả lời giải quyết câu hỏi đó.
differlysuperiorman

9

Từ câu trả lời của Ignacio Vazquez-Abrams và H.-Dirk Schmitt, người ta có thể thêm các câu sau vào .ssh / config

HOST XXX*
    HostName %h.YYY.com
    User myname

và sau đó, ví dụ, bạn có thể đăng nhập với tên myname@XXX2.YYY.com bằng cách

ssh XXX2

vì XXX * đã ngụ ý XXX.YYY.com, HostName chỉ nên %h, chứ không phải%h.YYY.com
biocyberman

8

cái này hiệu quả với tôi

Canonicalizehostname có
CanonicalDomains xxx.aogi.ac.nz yyy.aogi.ac.nz

máy chủ * .xxx.aogi.ac.nz
   người dùng myuser
máy chủ * .yyy.aogi.ac.nz
   người dùng myuser

điều này cho phép một người sử dụng tên trong tên miền và thay đổi tên người dùng:

bluebption: ~ user_one $ ssh itlogprd05
mật khẩu của myuser@itslogprd05.xxx.aogi.ac.nz: 

Đây là câu trả lời tốt nhất cho tôi. Tôi đã thoát khỏi tập lệnh mà tôi đã sử dụng để tạo cấu hình của mình!
jooks

Điều gì nếu một itslogprd05máy chủ tồn tại trong cả hai miền? xxx.auckland.ac.nzTôi đoán là thắng?
Levente Huszko
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.