2015-11-02 125 views

回答

3

~/.ssh/config你不能有太多的逻辑,也没有Bash。这个文件的手册在man ssh_config,它没有提到这种功能。

你可以做的是创建一个脚本,它将拥有你所需要的逻辑,并让你对脚本进行ssh配置调用。沿线的 东西:

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

,写一个bash脚本/root/bin/ssh-randomly.sh取两个主机参数,选择其中一个随机,并使用合适的参数运行真正的ssh命令。

4

否; .ssh/config不被任何外部程序处理。你将需要一个shell函数沿

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

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

您的proxycommand可以是一个shell脚本。

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 

未经检验。你的milage可能会有所不同。可能含有坚果。


更新:

每评论,我已经测试了以下,它也很好地工作:

host myhost1 myhost2 
    ProxyCommand bash -c 'hosts=(bastion1 bastion2); ssh -xaqW%h:22 ${hosts[$RANDOM % ${#hosts[@]}]}' 

当然,这种方法不允许您指定每个主机的自定义端口,如果您的ssh配置中的同一个host条目中的多个主机需要,您可以将其添加到单独的shell脚本的逻辑中。

+0

很酷,谢谢!是否有任何理由我不会仅仅做 'ssh -A $ onehost $ {2:+ - W $ 1:$ 2}' 作为现有Proxycommand的更直接副本? –

+1

在此脚本中,通过从bash数组中选择随机数组元素来设置'$ onehost'变量。你的ProxyCommand是由你的shell执行的,所以只要你的shell是bash,我不明白你为什么不能在一行中包含这个脚本的全部功能,尽管我没有尝试过。我这样回答,因为我不知道你使用bash作为你的默认shell。 (在我的系统中,我使用bash编程,但tcsh是我的默认shell。) – ghoti

+0

@BobRisky:添加了一个将脚本嵌入到单个ProxyCommand行的选项。 :) – ghoti

相关问题