SSH経由でホストに接続するときは、単に入力して接続できるようにしたいですssh hostname
。
ただし、現在の設定では接続するにはhostname.hosts.companyname.com
。
ホストファイルにホスト名を追加せずに接続を放棄する前に、複数のホスト名を繰り返すようにSSHを設定できますか?例えば。と入力すると、
ssh hostname
SSHで次のことができます。
hostname
短いタイムアウト後に失敗した場合は、SSH経由でアクセスしてみてください。hostname.hosts.companyname.com
短いタイムアウト後に失敗した場合は、SSH経由でアクセスしてみてください。- SSH経由で接続しようとします
hostname.companyname.com
。失敗するとエラーが出力されます。
しかし、私たちは1000を超えるホストを持っており、すべてのホストにエイリアスを追加したくありません。これが基本的な動作であることを願っています。
上記は簡単な例です。私はこのリストに30の潜在的なドメイン範囲を追加できるようにしたいと思います。resolv.conf
search
これがオプションではない理由です(ドメインが6つに制限されているためです)。
答え1
/etc/resolv.conf
DNSを更新するには、次の2つの手順に従ってください。
domain
または行があるかもしれませんsearch
。存在する場合は、ファイルからに置き換えてdomain
次のsearch
手順に進みます。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
。