ネットワークごとに SSH 設定を構成できますか?

ネットワークごとに SSH 設定を構成できますか?

私が話しているのはssh_config(5)現在接続されているネットワークに基づいて、設定セクションまたはファイルを定義できるかどうか疑問に思います。

企業のファイアウォールがポート 22 をブロックしているが、自宅のネットワークではブロックしていないというシナリオを考えています。つまり、この構成はありますが、自宅では技術的には必要ありません。

Host github.com
  Hostname ssh.github.com
  Port 443

これはあまり興味深いシナリオではないと思いますが、私が何を言いたいのかは伝わると思います。

答え1

私は、DHCP 提供のドメインで命名された複数の構成と、フォールバックとしての 1 つのデフォルト (例: 、で2 つのドメイン、 で~/.ssh/config.abc、およびデフォルト) を用意することでこの問題を解決しました。なぜデフォルトでコロンが必要なのか疑問に思うかもしれませんが、これにより という名前のドメインが許可されます。~/.ssh/config.xyz~/.ssh/config:defaultabcxyzdefault

~/.ssh/update-config次に、コマンドラインで渡されたドメインに基づいてファイルの 1 つをリンクする小さなスクリプトがあります。

#!/bin/bash`

config=~/.ssh/config
default_config=${config}:default

domain="$1"
domain_config=${config}.${domain}

if test -f ${domain_config}; then
    echo "Using config ${domain_config}"
    ln -sf ${domain_config} ${config}
else
    echo "Using default config ${default_config}"
    ln -sf ${default_config} ${config}
fi

その後、適切なドメインを最初のパラメータとして指定して、このスクリプトを手動で呼び出すことができます。

これを自動化するために、NetworkManager フック ( /etc/NetworkManager/dispatcher.d/02-sshconfig) も追加しました。

#!/bin/bash

case "$2" in
    up|dhcp4-change)
        break
        ;;
    *)
        exit 0
        ;;
esac

# some iface went up

for home in /home/*; do
        user=$(basename ${home})
        script="${home}/.ssh/update-config"
        test -x ${script} && su -l ${user} ${script} ${IP4_DOMAINS}
done

exit 0

これで、インターフェースが起動するか、DHCP 構成が変更されるたびに、このスクリプトがupdate-config各ユーザーに対して実行されます。

理想的ではありませんが (有線ネットワークのドメインが無線ネットワークと異なる場合や、DHCP 構成にドメインがない場合など)、何年もの間非常にうまく機能していたため、構成したことを忘れてしまい、古いラップトップを探し回って新しいラップトップに移植する必要がありました。

DHCP 構成によってドメインが提供されていない場合は、割り当てられた IP など、他の何かに基づいて構成の選択を試みることができます。

もちろん、構成には重複がいくつかあるため、特別なタグ (DHCP ドメイン、IP アドレス/範囲) を含む 1 つのソース構成と、タグ付けされたホストのみを実際の構成にフィルターするスクリプトの方が適している可能性があります。誰かがここでインスピレーションを得られるかもしれません。

答え2

コメントで示唆された 1 つの回答では、ユーザーの SSH 構成ファイルでネットワークごとのルールを維持することを提案しています。たとえば...

Host foo@work
  Hostname ssh.foo.com
  Port 443

これは、コマンドをより細かく制御し、ホスト名を入力する場合に機能する可能性がありますが、git とpushコマンドpullは構成されたリモートから直接読み取られます。

どうやら、仕事用/自宅用のリモコンも設定する必要があるようです :(

関連情報