~/.ssh/configで正規表現を使用する方法はありますか?

~/.ssh/configで正規表現を使用する方法はありますか?

2セットのサーバーがあります。生産テスト。すべてのサーバーには内部IPがあります。現在、私は次のエイリアスを使用してログインしています。

Host pro-10
Hostname 192.168.1.10
ProxyCommand ssh production-server nc %h %p

各サーバーに対してこの規則を繰り返す必要があります。これを行うための正規表現を探していますか?

Host pro-*
Hostname 192.168.1.$1
ProxyCommand ssh production-server nc %h %p

これを行う方法はありますか?

答え1

いいえ、SSHは正規表現をサポートしていません。ssh_config (1)そして、あなたが提示した例は正規表現ではありません。ssh_config (1)SupportedPATTERNSつまり、IP のパターンを定義できます。

Host 192.168.1.*
  ProxyCommand ssh production-server nc %h %p

そして、すべての内部IPを転送できる必要があります。別の解決策は、/etc/hosts次のように特定のIPのエントリを追加することです。

192.168.1.10 pro10
192.168.1.11 pro11

ファイルにエントリを作成します~/.ssh/config

Host pro1?
  ProxyCommand ssh production-server nc %h %p

答え2

SSH設定を動的に設定するために正規表現を使用することは不可能だと思います。ただし、Bashのforループを使用して各サーバーの構成ファイルに3行を自動的に生成できるはずです。この例では、pro-75からpro-125までのサーバーのエントリを作成する必要があるとします。

for i in $(seq 75 125);
do
    echo "Host pro-$i" >> ~/.ssh/config
    echo "Hostname 192.168.1.$i" >> ~/.ssh/config
    echo "ProxyCommand ssh production-server nc %h %p" >> ~/.ssh/config
    echo "\n" >> ~/.ssh/config
done

これにより、75から125までのすべての数字を含むリストが作成され、繰り返しリストとして保存されます。次に、リストの各メンバーを繰り返して$ iを置き換えます。各行は SSH ユーザー設定ファイルの末尾に追加されます。最後に、設定ファイルを少し分割するために改行を追加しました。

連続した数値フィールドではなく、リストに特定の値が必要な場合は、次のようにリストを手動で作成します。

1 23 45 67 89

答え3

いいえ、残念ながら不可能です。拡張機能が利用可能であることは既にご存知かもしれませんが、%hそれはすべてです。

あなたの場合はforループを使用しませんか?

for i in {4..10}
do  
  echo -e "Host pro-$i\nHostname 192.168.1.$i\nProxyCommand ssh production-server nc %h %p\n"; >> ~/.ssh/config
done

私が考えることができる唯一の他のオプションは、正規表現を使用してDNSエントリを作成し(サーバーがこのオプションをサポートしている場合)、それを使用することです。

答え4

ProxyCommandを使用することが可能です。これは、単にシェルコマンドセットだからです。

Pro-*
ProxyCommand SSH本番サーバーNC 192.168.1をホストします。 `echo "%h" | perl -pe 's/pro-//' ` %p

関連情報