web-dev-qa-db-ja.com

ドメイン名なしのホスト名で内部的にサーバーにSSHで接続する方法は?

仕事を完了するには、職場で複数のサーバーにログインする必要があります。アクセスするサーバーのFQDNを入力するのに飽きてきました。自分のプライベートネットワークでsshを使用してログイン/ログアウトしています。私はそれが私たち自身のプライベートネットワーク上にあると99%確信していますb/cすべてのサーバーはip addr 10.x.y.zを持っています。ドメイン名ではなくホスト名だけでサーバーにSSHで接続する方法はありますか?

サーバーは複数の国にあります。サーバーの命名方法は非常に長いです。名前は次のとおりです。

hostname.country.domainname.com

手根管にssh [email protected]を入力しています

...サーバーにアクセスするたび。私が米国にいて、米国にある別のホストにアクセスしようとすると、ssh me@hostname2と入力するだけで問題なく接続できます。ただし、米国にいて、イングランドのサーバーに接続しようとすると、ssh [email protected]と入力してhostname3に接続できません。

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

毎回domainname.comを入力する必要がないように簡単に設定できる方法はありますか?

10
Classified

ワイルドカードを使用して、設定で%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を実行すると、ユーザーmeとしてfoo.eng.domainname.comに接続しようとします。

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

(まあ、それは私にとって有効なホスト名ではない前に私は明らかにエラーを受け取ります!)

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

18
Stephen Harris

追加した場合

_search domainname.com
_

_/etc/resolv.conf_に変換し、_hostname.country_を使用すると、ssh(およびその他のネットワークプログラム)は自動的に_domainname.com_を追加します1

2つの異なる国の2つのサーバーが同じホスト名を共有している場合、予期しない動作が発生する可能性があるため、searchパスに異なる国のドメインを追加することはお勧めしません2

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

参照 resolv.conf(5)


1 より正確には、_domainname.com_をそれ自体で解決できない場合、_hostname.country_を追加します。

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

9
Joseph R.

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

以下をssh設定ファイルに追加すると、sshは名前に最大1つのドットを含むすべてのホストにdomainname.comを追加しようとします。

CanonicalizeHostname yes
CanonicalDomains domainname.com

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

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

7
user2313067