SSHのControlPathにIPv4とIPv6を区別させる方法は?

SSHのControlPathにIPv4とIPv6を区別させる方法は?

私はそれを使用しています

ControlMaster   auto
ControlPath     ~/.ssh/tmp/%l_%r@%h:%p

内部では、~/.ssh/configSSHを介してホストにアクセスすると、同じ接続を使用して複数のセッションが開きます。

これはほとんどのユースケースでうまく機能しますが、IPv4とIPv6を介して同時に同じホスト名に接続することはできません。他のすべての接続はIPv4とIPv6をControlPath区別できないため、最初の接続で作成された制御ソケットを使用します。 IPv6接続。

IPv4およびIPv6接続に別々の制御ソケットを提供する方法はありますか(おそらく、ソケットパスでリモートホスト名の代わりにリモートIPを使用する方法を見つけること)。


編集#1

Match私はちょうどファイルで利用可能なオプションを覚えて、次のことを試しました。ssh_configsshd_config

Match AddressFamily inet
    ControlPath     ~/.ssh/tmp/%l_%r@%h:%p.inet

Match AddressFamily inet6
    ControlPath     ~/.ssh/tmp/%l_%r@%h:%p.inet6

残念ながら、これは失敗します。」一致プロパティ AddressFamily はサポートされていません。「ホストに接続しようとすると、もう一度原点に戻ります...

ベストアンサー1

これは一般的なユースケースではないため、これを行う直接的な方法はありません。ただし、あまりにも多くのリモートホストが必要ない場合は、ユーザープロファイルを使用してこの問題を解決できます。

Host hostname-4
    Hostname hostname
    AddressFamily inet
    ControlPath ~/.ssh/master4-%l%h%p%r
Host hostname-6
    Hostname hostname
    AddressFamily inet6
    ControlPath ~/.ssh/master6-%l%h%p%r

おすすめ記事