ドメイン名なしでホスト名で内部的にサーバーに ssh するにはどうすればいいですか?

ドメイン名なしでホスト名で内部的にサーバーに ssh するにはどうすればいいですか?

仕事を完了するために、職場の複数のサーバーにログインする必要があります。アクセスするためにサーバーの FQDN を入力するのにうんざりしています。自分のプライベート ネットワークで ssh 経由でログイン/ログアウトしています。すべてのサーバーの IP アドレスが 10.xyz であるため、自分のプライベート ネットワーク上にあることは 99% 確実です。ドメイン名ではなく、ホスト名だけでサーバーに ssh する方法はありますか?

私たちは複数の国にサーバーを設置しています。私たちのサーバーの名前は非常に長く、次のように命名されています。

hostname.country.domainname.com

入力中に手根管症候群になりそう ssh [email protected]

... 弊社のサーバーにアクセスするたびに発生します。米国にいて、米国内の別のホストにアクセスしようとすると、入力するだけで問題なく接続できます。ただし、米国にいて、英国のサーバーに接続しようとすると、入力して接続することssh me@hostname2ができません。ssh [email protected]hostname3

私が行った回避策は、いくつかのサーバーの ~/.ssh/config ファイルにエイリアスを設定することでした。しかし、そのファイルに 1000 台以上のサーバーを追加するのは現実的ではないと思います。すでに 20 台以上のサーバーを追加しており、同僚は私がおかしいと思っていますが、私も同僚が ssh 時に FQDN を入力するのはおかしいと思っています。

毎回 domainname.com を入力しなくても済むように設定できる簡単な方法はありますか?

答え1

%hワイルドカードを使用して設定に使用することができます

例えば

Host *.eng
  Hostname %h.domainname.com

今、それを実行すると、ssh foo.engに接続しようとしますfoo.eng.domainname.com

この設定に他のオプションを追加することもできます。たとえば、ユーザー名を強制するなどです。

Host *.eng
  Hostname %h.domainname.com
  User me

今、それを実行すると、ユーザーとしてssh foo.eng接続しようとします。foo.eng.domainname.comme

% ssh foo.eng
ssh: Could not resolve hostname foo.eng.domainname.com: Name or service not known

(まあ、明らかに、私にとっては有効なホスト名ではないため、エラーが発生します!)

したがって、今では国ごとに 1 つのルールのみが必要になります。

答え2

CanonicalDomainsSSH 設定でオプションを使用できます。

domainname.com以下の内容を ssh 設定ファイルに追加すると、ssh は名前に最大 1 つのドットが含まれるホストに追加を試みます。

CanonicalizeHostname yes
CanonicalDomains domainname.com

この設定では、ssh foo.engは最初に を試行し、ホストが見つからない場合はfoo.eng.domainname.comにフォールバックします。同様に、 は最初に を試行するため、GitHub に接続する場合、DNS サーバーは存在しないホストのレコードを返さない必要があります。foo.engssh github.comgithub.com.domainname.com

CanonicalizeMaxDots使用すると、ssh がホスト名を完全修飾と見なし、追加しなくなる前に、ホスト名に表示できるドットの数を制御できますdomainname.com。デフォルトでは 1 に設定されており、現在使用しているスキームではこれで十分なはずですが、次のような場合は、hostname.city.countryこの値を増やす必要があります。

答え3

追加すると

search domainname.com

/etc/resolv.conf、 を使用するとhostname.country、 (そして他のネットワーク プログラムでも) 自動的に1 がssh追加されます。domainname.com

異なる国のドメインをパスに追加するのは良い考えではないと思います。2searchつの異なる国の2つのサーバーが同じホスト名を共有すると、予期しない動作が発生する可能性があるためです。

この方法は、使用しているプログラム ( 、VNC など)に関係なく解決できるsshため、構成を変更するよりも優れていると思います。hostname.countrytelnet

見るresolv.conf(5)


1domainname.comより正確に言うと、それ自体で解決できない場合に追加されますhostname.country

2このようなシナリオでは、パスhostnameの最初にドメインがリストされている国のサーバーに解決されますsearch

関連情報