SSH構成ファイルを作成していて、少しロジックを実行したいと考えています。例えば:
Host myhost1
ProxyCommand ssh -A {choose randomly between [bastion_Host1] and [bastion_Host2]} -W %h:%p
(bash?)変数を使用して上記を達成することは可能ですか?ありがとう!
プロキシコマンドはシェルスクリプトにすることができます。
Host myhost1
ProxyCommand $HOME/bin/selecthost %h %p
そして~/bin/selecthost
:
#!/usr/bin/env bash
hosts=(bastion1 bastion2)
onehost=${hosts[$RANDOM % ${#hosts[@]}]}
ssh -x -a -q ${2:+-W $1:$2} $onehost
未テスト。あなたの走行距離は異なる場合があります。ナッツが含まれている場合があります。
更新:
コメントごとに、私は以下をテストしました、そしてそれもうまくいきます:
Host myhost1 myhost2
ProxyCommand bash -c 'hosts=(bastion1 bastion2); ssh -xaqW%h:22 ${hosts[$RANDOM % ${#hosts[@]}]}'
もちろん、この方法では、ホストごとにカスタムポートを指定できません。ssh構成の同じHost
エントリにある複数のホストに必要な場合、別のシェルスクリプトのロジックに追加できます。
~/.ssh/config
では、ロジックを多くすることはできず、Bashもありません。このファイルのマニュアルはman ssh_config
にあり、そのような機能については触れられていません。
できることは、必要なロジックを持つスクリプトを作成し、そのスクリプトをssh構成で呼び出すことです。以下に沿ったもの:
ProxyCommand Sudo /root/bin/ssh-randomly.sh [bastion_Host1] [bastion_Host2]
そして、Bashスクリプト/root/bin/ssh-randomly.sh
を記述して2つのホスト名パラメーターを取得し、そのうちの1つをランダムに選択して、適切なパラメーターを指定して実際のssh
コマンドを実行します。
番号; .ssh/config
は外部プログラムによって処理されません。あなたはの行に沿ってシェル関数が必要になります
ssh () {
(( $RANDOM % 2 )) && bastion=bastion_Host1 || bastion=bastion_Host2
command ssh -A "$bastion" "$@"
}