web-dev-qa-db-ja.com

〜/ .ssh / configファイルで変数を使用できますか?

SSH構成ファイルを作成していて、少しロジックを実行したいと考えています。例えば:

Host myhost1
    ProxyCommand ssh -A {choose randomly between [bastion_Host1] and [bastion_Host2]} -W %h:%p

(bash?)変数を使用して上記を達成することは可能ですか?ありがとう!

16
Bob Risky

プロキシコマンドはシェルスクリプトにすることができます。

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エントリにある複数のホストに必要な場合、別のシェルスクリプトのロジックに追加できます。

12
ghoti

~/.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コマンドを実行します。

6
janos

番号; .ssh/configは外部プログラムによって処理されません。あなたはの行に沿ってシェル関数が必要になります

ssh () {
    (( $RANDOM % 2 )) && bastion=bastion_Host1 || bastion=bastion_Host2

    command ssh -A "$bastion" "$@"
}
5
chepner