CanonicalizeHostname
ファイルを編集せずにホストを追加および削除できるように、SSH設定でこれを使用したいと思います。
Host bastion
ProxyJump none
Match canonical
ProxyJump bastion
ForwardAgent yes
Host *
ForwardAgent no
CanonicalizeHostname always
CanonicalDomains mydomain.co.uk
CanonicalizeMaxDots 0
CanonicalizeFallbackLocal yes
ssh-agentは私のサーバーに渡されません。 「はい」にForwardAgent
変更するとHost *
渡されます。ForwardAgent
次の内容が解析されなかったため、バグがあると仮定してMatch canonical
OpenSSHに報告しました(以降、そのレポートは削除されました)。
期待どおりに動作すると説明されました。
ホスト名の正規化がイネーブルの場合、構成は 2 回解析されます。最初のステップではオプションを収集し、ホスト名が確定したら2番目のステップに進みます。ほとんどの設定オプションは「最初のゲームの勝利」です。
したがって、ここで行われることは、最初のパスで「Host *」ブロックが解析され、ForwardAgentオプションが「no」に設定されることです。以降のパスでは、「正規一致」ブロックのForwardAgentディレクティブがすでに設定されているため、無視されます。
私は理解することができます。私はそれが2回解析され、アクティブになったことがCanonicalizeHostname
わかりましたが、その結果に気づいていませんでした。
私が理解していないのは、「最後に代替ForwardAgentのみを設定する」ことを防ぐ方法です。
Host bastion
ProxyJump none
Match canonical
ProxyJump bastion
ForwardAgent yes
Match all
CanonicalizeHostname always
CanonicalDomains mydomain.co.uk
CanonicalizeMaxDots 0
CanonicalizeFallbackLocal yes
Match canonical all
ForwardAgent no
私の質問:
とどう
Match All
違うのHost *
?どういう意味ですか
Match canonical all
?正式ホストに対してオプションがすでに異なる方法で設定されているのに、正式ホストにオプションを再解決するように指示されているのはなぜですか。もしそうなら、!canonical
これは私にもっと意味があるでしょう。重複しているように見えますが、この場合、以下の単一のディレクティブがすでに設定されているためです。
追加できる他のオプションがたくさんありますが、ほとんど以下にありHost *
関連性がないのでCanonicalizeHostname
省略しましたが、今はどこに入れるべきかわかりません。
答え1
特定のホストサブセットにのみ適用される構成ブロックを作成できます。すべて一致ブロックはすべてのホストと一致し、Host*と同じです。
完全修飾されたすべての一致ブロックは、完全修飾されたすべてのホストに適用されます。
Match !canonicalの代わりにMatch canonical allを使用すると、設定オプションは完全修飾ホストにのみ適用され、明示的なホスト名を指定したホストには適用されません。
デフォルトはすべて一致するものです。正規化に関係なく、すべてのホストにオプションを適用するには、このオプションを選択します。完全修飾ホストにのみ適用するには、オプションで許可するエントリを指定して、以下に追加の一致ブロックを作成します。
SSH クライアントはホストに接続し、一致する最初のプロファイルを決定します。一致するファイルが複数ある場合、最初に一致するホストまたは一致ブロックのオプションが優先されます。
CanonicalizeHostnameオプションが正しく機能するには、デュアル転送確認モードを有効にする必要があります。各検証中に、構成ファイルの各ホスト名について、フィルターと一致ブロックが評価されます。フィルタが最初に評価され、次に一致ブロックが評価されます。
予想される範囲に応じて、一致ブロックにオプションを追加できます。オプションがすべてのホストに適用される場合は、すべて一致の下に配置します。完全修飾ホストにのみ適用される場合は、これらのオプションを使用して新しい一致ブロックを作成し、それに応じて適用します。
源泉:
OpenSSH オプションのホスト名の正規化に関するいくつかの注意
所有者 キーワードの後に指定されたパターンのいずれかに一致するホストにのみ適用されるように、次の宣言(次のHostまたはMatchキーワードまで)を制限します。複数のパターンがある場合は、スペースで区切る必要があります。単一の「*」パターンを使用して、すべてのホストにグローバルデフォルトを提供できます。ホストは通常、コマンドラインで指定されたホスト名引数です(例外についてはCanonicalizeHostnameキーワードを参照)。パターンアイテムの前に感嘆符(「!」)を付けてパターンアイテムを無効にすることができます。負の項目が一致すると、行の他のパターンが一致するかどうかに関係なく、ホスト項目は無視されます。したがって、否定一致は、ワイルドカード一致の例外を提供するのに役立ちます。パターンの詳細については、パターンを参照してください。
ssh_config(5) — Linux のマニュアルページ
例:
# Match on hostname
Match Host example.com
# Match ip
Match Address 192.168.178.*
# Match on user
Match User alice
# Match based on group
Match Group admin
# Multiple criteria
Match Host example.com User alice
# Match multiple criteria, use this key for some hosts
Match canonical,Host host.domain.cocom,192.168.178.100
IdentityFile ~/.ssh/my_key
# Match multiple criteria, disable port forwarding for some hosts
Match canonical,Host *.domain.com,*.internal,192.168.178.*
ForwardAgent no
ForwardX11 no
CanonicalizeHostname yes
CanonicalDomains example.org example.com
CanonicalizeMaxDots 1
CanonicalizeFallbackLocal yes
CanonicalizePermittedCNAMEs *.redis.example.org:redis.example.com
すべて一致とホスト*の違いは何ですか?
Host* はすべてのホストと一致するため、後続の構成ディレクティブがすべてのホストに適用されます。ホスト名は、使用するパターンの任意の場所に表示できます(パターン自体の一部として、またはアスタリスクの後に)。
「Match All」キーワードは、特定のホストに適用されるすべての構成ディレクティブをグループ化するために使用されます。 「すべて一致」を使用すると、デフォルトですべてのホストと一致するため、パターンを指定する必要はありません。
例:
Host *
<config directives>
Host *
StrictHostKeyChecking no
Match All
<config directives>
Match All
Compression yes
一致する仕様とはどういう意味ですか?正式ホストに対してオプションがすでに異なる方法で設定されているのに、正式ホストにオプションを再解決するように指示されているのはなぜですか。 !canonicalなら私にはもっと意味があるでしょう。ただし、この場合、以下の単一のディレクティブがすでに設定されているため、重複しているように見えます。
正規すべて一致は、DNSドメイン名検索アルゴリズムで名前を正規化できるすべての正規ホストに適用される設定オプションです。 SSHの「canonical」キーワードは、ホスト名がホスト名のエイリアスまたは短縮バージョンではなく、完全修飾名でなければならないことを意味します。質問の2番目の部分に関して、特定のディレクティブを使用してホストの設定オプションを設定し、そのホストが同じオプションを使用して「一致」ブロックと一致する場合
「正式にすべて一致」は、すべての正式ホストに適用されます。ホストが特定のディレクティブと同じオプションを使用する「一致」ブロックとすべて一致する場合、「一致」ブロックが優先されます。 「!canonical」の「!」は「不規則」を意味します。したがって、「Match !canonical」は、DNS ドメイン名検索アルゴリズムで正規化できない非正規ホストに適用されます。
正式なホスト一致オプションは、ホストごとに使用できます。ホストは DNS ゾーンファイルにリストされており、iproute2 を使用して設定されたアドレスがあり、同じネットワークデバイスのインターフェイス間でパケットをルーティングする場合は一致します。ホストがこれらの条件を満たさない場合は、仕様に準拠していません。
SSH で CanonicalizeHostname オプションを有効にすると、リモートホストのホスト名が 2 回解決されます。 1つ目は接続が確立され、2つ目はSSHクライアントがCanonicalizeHostnameディレクティブを使用してMatchブロックを適用するときです。正規ホストのCanonicalizeHostnameディレクティブを含むMatchブロックがある場合、ホスト名は2回解決され、Matchブロックの設定オプションは以前に設定された特定のディレクティブよりも優先されます。