SSH経由で接続するときに、さまざまなホストサフィックスを試しました。

SSH経由で接続するときに、さまざまなホストサフィックスを試しました。

SSH経由でホストに接続するときは、単に入力して接続できるようにしたいですssh hostname

ただし、現在の設定では接続するにはhostname.hosts.companyname.com

ホストファイルにホスト名を追加せずに接続を放棄する前に、複数のホスト名を繰り返すようにSSHを設定できますか?例えば。と入力すると、 ssh hostnameSSHで次のことができます。

  1. hostname短いタイムアウト後に失敗した場合は、SSH経由でアクセスしてみてください。
  2. hostname.hosts.companyname.com短いタイムアウト後に失敗した場合は、SSH経由でアクセスしてみてください。
  3. SSH経由で接続しようとします hostname.companyname.com。失敗するとエラーが出力されます。

しかし、私たちは1000を超えるホストを持っており、すべてのホストにエイリアスを追加したくありません。これが基本的な動作であることを願っています。

上記は簡単な例です。私はこのリストに30の潜在的なドメイン範囲を追加できるようにしたいと思います。resolv.conf searchこれがオプションではない理由です(ドメインが6つに制限されているためです)。

答え1

/etc/resolv.confDNSを更新するには、次の2つの手順に従ってください。

  1. domainまたは行があるかもしれませんsearch。存在する場合は、ファイルからに置き換えてdomain次のsearch手順に進みます。
  2. hosts.companyname.com companyname.com検索リストに追加します。search(または)ディレクティブがない場合は、domainこれら2つの値を使用してディレクティブを作成します。

結果の例

nameserver 192.168.1.254
nameserver 192.168.2.254
search hosts.companyname.com companyname.com

/etc/hostsこれにより、あなたの基準に基づいてDNSを介して資格のない名前を解決できます。

答え2

少なくとも2つのオプションがあります。

構成ファイル

~/.ssh/configエイリアスを使用してファイルを生成します。

Host hostname
    HostName hostname.hosts.companyname.com

正しいホスト名が静的であるとします。もちろん、これはファイルの変更と多少似ています/etc/hosts

シェル機能

sshコマンド名または明示的に呼び出す必要がある項目(たとえば)に対してシェル関数を定義できますssh-hosts

ssh () {
        hostname="$1"
        test -z "$hostname" && return 128

        for suffix in "" .hosts.companyname.com .companyname.com ; do
                test_hostname="$hostname$suffix"
                if [ -n "$(ssh-keyscan "$test_hostname" 2>/dev/null)"; then
                        ssh "$test_hostname"
                        return $?
                fi
        done
}

もちろん、configこの方法を使用してファイルを生成することもできます。すべてのホスト名のリストがない場合は、シェル機能を使用してファイルに新しいHostブロックを追加し、configファイルを実行する前に確認することもできますssh-keyscan

関連情報