ssh configの複数の同様のエントリ


193

私は私の設定したいと言うssh私に同じ設定で30台のサーバのオプションを.ssh configファイル:

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)manページから:

 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場合は、いつでも.NETを生成する簡単なスクリプトを書くことができますconfig
ロジャー

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(および私)を助ける唯一の答えのようです。
マッド物理学者

優先順位は何ですか?ファイルの後半で定義されたものは、ファイルの前で定義されたものをオーバーライドするだけですか?「Host X01」の下に「Compression no」と書かれているように、「Host X01 X02」の下の「Compression yes」によって上書きされますか?
ベンファーマー

1
ssh_configマニュアルから:各パラメーターの最初に取得した値が使用されるため、ファイルの先頭近くでホスト固有の宣言を追加し、末尾で一般的なデフォルトを指定する必要があります。
ギヨームヴィンセント

Host X01 X02 ...に置き換えることができます*.YYY.comか?それが機能する場合、それはわずかに管理しやすいようです。
マイケル

51

単に使用する *

参照man ssh_config

パターンパターンは、ゼロ個以上の非空白文字、「*」(ゼロ個以上の文字に一致するワイルドカード)、または「?」で構成されます。(正確に1文字に一致するワイルドカード)。たとえば、「。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"

ありがとう!それは私が必要なもののようですが、私はそれを私のケースに適応させる方法をまだ理解していません。疑問符?は、*記号と一致するパターンに置き換えたい場所で 使用しますか?
アメリオバスケスレイナ

2
うーん。パターンは、必要なものとは異なる目的に役立つと思います。複数のクエリを同じconfigエントリにリダイレクトしますが、ホストのパラメーターは固定されいます(つまり、パターンを使用してパラメーターをテンプレート化することはできません)。私が間違っている?
アメリオバスケスレイナ

4
@ user27915816はい、その通りです。私の知る限り、「テンプレート」を実行する方法はありません。最善の方法は、一定の行を1つのHost *エントリに分け、それぞれHost XXXが異なる部分(つまり、Hostname XXX.YYY.ZZZ行)のみで構成される個別のエントリを持つことです。
-jw013

このページは、「今のところ」「ssh config wildcards」をグーグルで検索したときの一番上の結果です。その質問に答える回答を提供してくれてありがとう。
非常にスーペリアマン

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を意味するので、ホスト名が唯一である必要があり%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のパスワード: 

これは私にとって最良の答えです。構成の生成に使用していたスクリプトを削除しました!
ジョーク

itslogprd05ホストが両方のドメインに存在する場合はどうなりますか?xxx.auckland.ac.nz勝つと思う?
レベンテフスコ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.