Srv1.domain.com、srv2.domain.com、...、srv50.domain.comという名前のサーバーがたくさんあります。
ssh srv1
でこれらのサーバーに接続できるようにしたい
.ssh/configに50個の構成エントリを入れたくない
Host srv1
HOSTNAME srv1.domain.com
USER amac
IdentityFile /home/amac/.ssh/id_rsa
私が好きなのは正規表現マッチングです。これにより、次のようなものを書くことができます。
HOSTNAME (srv[0-9]*).domain.com
Host \1
USER amac
IdentityFile /home/amac/.ssh/id_rsa
これは可能ですか?たぶん、「srv(。*)」のすべてのインスタンスをsrv\1.domain.comに変換するbashエイリアスを作成することによって、\ 1は正規表現と一致するparanthesisの部分文字列に対応しますか?
ありがとう。
これは、DNSによって最もよく解決される問題のように聞こえます。これを/etc/resolv.conf
に追加します:
search domain.com
DNSルックアップにドットが含まれていない場合1 または、NXDOMAIN応答を返すと、その検索値が追加された別のDNSルックアップが行われます。
例:
ssh srv1
を実行すると、srv1.domain.com
のDNSルックアップが行われます。
ssh srv1.dc1
を実行すると、DNSルックアップはsrv1.dc1
に対して行われ、NXDOMAINが返されます。自動フォローアップDNSルックアップはsrv1.dc1.domain.com
用になります。
空白で区切られたその行に複数の検索ドメインを追加でき、そのうちの1つがAレコードを返すまで、リストされた順序で試行されます。2。
1.)この値は構成可能であり、短い名前のドット数よりも少なくする必要があります。デフォルト値は1であり、ホストの形式がsrv1.dc1.domain.com
であるサイトの場合は1より大きく設定する必要があります。これにより、dc1
トップレベルドメインのルートサーバーへの無駄なリクエストが回避されます。
2.)またはAAAAレコード。
Host *.*
Hostname %h
Host *
Hostname %h.domain.com
IdentityFile /path/to/keyfile.pem
最初のルールは通常のドメイン名と一致し、ドメイン名を渡すだけです。 2番目のルールは、単一のWordホストを処理し、domain.comを最後に追加します。
これの副作用の1つは、anotherdomain.comへのssh呼び出しの場合でも、sshがdomain.comのIdentityFileを使用しようとすることです。しかし、それは重要ではないと思います。
ProxyCommand
を使用して、コマンドラインで指定されたホスト名でregex
を使用できます。
Host srv*.domain.com
User amac
ProxyCommand nc $(sed -e "s/.domain.com//" <<< "%h") %p
IdentityFile /home/amac/.ssh/id_rsa
これで、ssh srv23.domain.com
はsrv23
に接続します。
HostName
を指定する必要はないことに注意してください。
opensshはパターンをサポートしますが( http://linux.die.net/man/5/ssh_config を参照)、一致への参照はサポートしません(AFAIK)。
質問で使用したのとほぼ同じように、ワイルドカードを指定できます。
Host srv*.domain.com
User amac
IdentityFile /home/amac/.ssh/id_rsa
完全なホスト名を指定する必要がない場合は、前述のdnsトリックを実行する(およびホスト行をsrv *に変更する)か、次のようにシェル関数を作成します。
ss() {
if [ -z "$1" ]; then
echo "specify a server #, eg ss 10"
else
echo "ssh'ing to srv$1.domain.com"
ssh srv$1.domain.com
fi
}
そしてそれを次のように使用します:
ss 10
DNSを変更するよりも簡単で、srv01.someotherdomain.comにアクセスしたいときに問題が発生することはありません。
指定するときに問題がありました
Host srv*
Hostname %h.domain.com
完全なホスト名を使用して接続できなくなりました:
$ ssh srv677.domain.com
ssh: Could not resolve hostname srv677.domain.com.domain.com: Name or service not known
Domain.comを2倍にすることに注意してください。
短い形式と完全な形式の両方のホスト名を介して接続できるようにするために、次のトリックを実行しました。
Host srv* !srv*.domain.com
Hostname %h.domain.com
User amac
IdentityFile /home/amac/.ssh/id_rsa
Host srv*.domain.com
User amac
IdentityFile /home/amac/.ssh/id_rsa
またはさらに良い解決策(この回答に触発された https://superuser.com/a/46947 ):
Host *.domain.com srv* vrs*
User amac
IdentityFile /home/amac/.ssh/id_rsa
Host !*.domain.com srv* vrs*
Hostname %h.domain.com
すべてのオプションを2回コピーする必要がないため、より優れています。