SSH 구성의 여러 유사한 항목


193

ssh.ssh config파일 에서 동일한 설정으로 30 대의 서버에 대한 옵션 을 구성하고 싶다고 가정 해보십시오 .

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

이 30 대의 기계 사이에서 바뀌는 유일한 것은입니다 XXX.

config파일 에서 위의 구조를 30 번 반복하는 대신 컴퓨터 범위를 정의하는 다른 방법이 있습니까?

답변:


232

로부터 ssh_config(5)매뉴얼 페이지

 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).

그래서:

Host XXX1 XXX2 XXX3
  HostName %h.YYY.com

9
%h기능 은 OpenSSH 릴리스 5.6에 나타났습니다 . 나는 왜 그것을 전에 보지 못했는지 궁금해했다-Debian Squeeze의 버전은 5.5입니다.
jw013

2
이전 OS를 사용 중이거나에서 지원되지 않는 규칙이 필요한 경우 언제든지을 config생성하는 간단한 스크립트를 작성할 수 있습니다 config.
Roger Dahl

69

설정을 최소화하려면 다음 .ssh/config과 같이 할 수 있습니다

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 ...Host *모든 호스트에 다음과 같은 구성이있는 경우 교체 가능


2
이것은 실제로 OP (및 자신)를 돕는 유일한 대답 인 것 같습니다.
Mad Physicist

우선 순위는 무엇입니까? 파일에서 나중에 정의 된 내용이 파일에서 이전에 정의 된 내용보다 우선합니까? "Host X01"아래에 "Compression no"가 있다고 말한 것처럼 "Host X01 X02"아래의 "Compression yes"로 재정의됩니까?
벤 파머

1
ssh_config 매뉴얼에서 : 각 매개 변수에 대해 첫 번째로 얻은 값이 사용되므로 파일의 시작 부분 근처에 더 많은 호스트 별 선언을 제공하고 끝에는 기본값이 있어야합니다.
기 illa 빈센트

Host X01 X02 ...로 대체 할 수 있습니까 *.YYY.com? 작동하면 약간 더 관리하기 쉬운 것 같습니다.
마이클

51

간단히 사용 *

참조 man ssh_config:

패턴 패턴은 0 개 이상의 비 공백 문자, '*'(0 개 이상의 문자와 일치하는 와일드 카드) 또는 '?'로 구성됩니다. (정확히 한 문자와 일치하는 와일드 카드). 예를 들어, ".co.uk"도메인 세트의 호스트에 대한 선언 세트를 지정하려면 다음 패턴을 사용할 수 있습니다.

       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"

감사! 그것은 내가 필요한 것 같지만 여전히 내 경우에 어떻게 적응시켜야하는지 이해하지 못한다. 부호 ?와 일치하는 패턴으로 대체하려는 물음표를 어디에서 사용 *합니까?
Amelio Vazquez-Reina

2
흠. 패턴이 필요한 것과 다른 목적으로 사용된다고 생각합니다. 여러 쿼리를 동일한 config항목으로 리디렉션 하지만 호스트의 매개 변수는 고정되어 있습니다 (즉, 패턴을 사용 하여 매개 변수 를 템플릿 화할 수 없음 ). 내가 잘못?
Amelio Vazquez-Reina

4
@ user27915816 네, 그렇습니다. 내가 아는 한 "템플릿"을 수행 할 수있는 방법이 없습니다. 할 수있는 최선의 방법은 상수 라인을 단일 Host *항목으로 분리하고 각기 다른 Host XXX부분 (예 : Hostname XXX.YYY.ZZZ라인)으로 구성된 별도의 항목을 갖는 것 입니다 .
jw013

이 페이지는 인터넷 검색시 "ssh config 와일드 카드"의 최상위 결과이므로 해당 질문에 대한 답변을 제공해 주셔서 감사합니다.
hugesupersuperman

9

Ignacio Vazquez-Abrams와 H.-Dirk Schmitt의 답변에서 .ssh / config에 다음을 추가 할 수 있습니다

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

예를 들어 다음을 통해 myname@XXX2.YYY.com으로 로그인 할 수 있습니다.

ssh XXX2

XXX *는 이미 XXX.YYY.com을 의미하므로 HostName은해서는 %h안됩니다.%h.YYY.com
biocyberman

8

이것은 나를 위해 작동합니다 :

CanonicalizeHostname 예
CanonicalDomains xxx.auckland.ac.nz yyy.auckland.ac.nz

호스트 * .xxx.auckland.ac.nz
   사용자 myuser
호스트 * .yyy.auckland.ac.nz
   사용자 myuser

이를 통해 도메인 내에서 이름을 사용하고 사용자 이름을 변경할 수 있습니다.

bluebottle : ~ user_one $ ssh itslogprd05
myuser@itslogprd05.xxx.auckland.ac.nz의 비밀번호 : 

이것은 나에게 가장 좋은 대답입니다. 구성을 생성하는 데 사용한 스크립트를 제거했습니다!
jooks

itslogprd05호스트가 두 도메인에 모두 존재 하면 어떻게 됩니까? xxx.auckland.ac.nz이길 것 같아요?
Levente Huszko
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.