2015-11-02 13 views
9

私はSSH設定ファイルを書いており、少しの論理を実行したいと思っています。例:〜/ .ssh/configファイルで変数を使用できますか?

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

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

答えて

3

~/.ssh/configでは、多くのロジックを持つことはできず、Bashも使用できません。このファイルのマニュアルはman ssh_configであり、このような機能については言及していません。

あなたができることは、あなたが必要とするロジックを持つスクリプトを作成し、そのスクリプトをssh設定呼び出しにすることです。線に沿って 何か:

ProxyCommand sudo /root/bin/ssh-randomly.sh [bastion_host1] [bastion_host2] 

そして、2つのホスト名のパラメータを取り、ランダムにそれらのいずれかを選択して、適切なパラメータと実際のsshコマンドを実行するbashスクリプト/root/bin/ssh-randomly.shを書きます。

4

いいえ; .ssh/configは外部プログラムによって処理されません。

ssh() { 
    (($RANDOM % 2)) && bastion=bastion_host1 || bastion=bastion_host2 

    command ssh -A "$bastion" "[email protected]" 
} 
7

あなたのプロキシコマンドはシェルスクリプトにすることができます。 ~/bin/selecthost

host myhost1 
    ProxyCommand $HOME/bin/selecthost %h %p 

そして:

#!/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エントリ内に複数のホストが必要な場合、別々のシェルスクリプトのロジックに追加できる、ホストごとのカスタムポート。

+0

ありがとう!既存のProxyコマンドのより直接的なコピーとして、 'ssh -A $ onehost $ {2:+ -W $ 1:$ 2}' のような理由はありますか? –

+1

このスクリプトでは、 '$ onehost'変数は、bash配列からランダムな配列要素を選択することによって設定されます。あなたのProxyCommandはあなたのシェルによって実行されるので、あなたのシェルがbashである限り、私はそれを試していませんが、なぜこのスクリプトの全機能を1行に含めることができなかったのか分かりません。私はあなたがデフォルトのシェルとしてbashを使用していることを知らないので、この方法で答えました。 (私のシステムでは、プログラミングにはbashを使用しますが、tcshはデフォルトのシェルです) – ghoti

+0

@BobRisky:スクリプトを単一のProxyCommand行に埋め込むオプションを追加しました。 :) – ghoti

関連する問題