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


10

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

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

hostname.country.domainname.com

手根管のタイプを入力しています ssh me@hostname1.country.domainname.com

...サーバーにアクセスするたびに。私が米国にいて、米国にある別のホストにアクセスしようとすると、入力するだけで問題なくssh me@hostname2接続できます。私はアメリカにいる、イギリスのサーバーに接続しようとした場合しかし、私は入力できませんssh me@hostname3.engとに接続しますhostname3

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

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

回答:


18

ワイルドカードを使用%hして構成で使用できます

例えば

Host *.eng
  Hostname %h.domainname.com

これを行うssh foo.engと、に接続しようとしfoo.eng.domainname.comます。

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

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

これを行うssh foo.engfoo.eng.domainname.com、ユーザーとして接続しようとしますme

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

(まあ、それは私にとって有効なホスト名ではない前にエラーが出ます!)

そのため、国ごとに必要なルールは1つだけです。


私の最初の考えはDNSエイリアスであり、2番目はhostsファイルでしたが、複数のサーバーがあることを知りませんでした。このソリューションは優れているように見えます。あなたが投稿した行を取得する構成は何ですか?
Xalorous 2016

これは$HOME/.ssh/config、システムに組み込むことも、システム全体に組み込むこともできます/etc/ssh/ssh_config
Stephen Harris

動作しuser@*.engますか?
Xalorous

3
私が書いたルールを使用すると、実行できssh foobar@somewhere.eng、期待どおりに機能します。これは、ホスト名コンポーネントを書き換えるだけです。それもでうまくいくscpsftpのように。
スティーブンハリス

9

追加した場合

search domainname.com

/etc/resolv.conf使用hostname.countryssh(そしてそのことについては、他のネットワークプログラムは、)が自動的に追加されますdomainname.comあなたのための1

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

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

見る resolv.conf(5)


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

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


2
ところで、これを非ルートとして、環境変数LOCALDOMAINによってプロセスごとに行うこともできます。man resolv.conf
rudimeier

これはSSHホストを解決するために機能しますが、GSS / Kerberosを使用している場合、名前は一致せず、認証は失敗します。
Nick T

7

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

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

CanonicalizeHostname yes
CanonicalDomains domainname.com

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.