我正在写一个SSH配置文件,并想执行一些逻辑。例如:一个〜/ .ssh/config文件可以使用变量吗?
Host myhost1
ProxyCommand ssh -A {choose randomly between [bastion_host1] and [bastion_host2]} -W %h:%p
是否有可能实现上述使用(bash?)变量?谢谢!
我正在写一个SSH配置文件,并想执行一些逻辑。例如:一个〜/ .ssh/config文件可以使用变量吗?
Host myhost1
ProxyCommand ssh -A {choose randomly between [bastion_host1] and [bastion_host2]} -W %h:%p
是否有可能实现上述使用(bash?)变量?谢谢!
在~/.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
命令。
否; .ssh/config
不被任何外部程序处理。你将需要一个shell函数沿
ssh() {
(($RANDOM % 2)) && bastion=bastion_host1 || bastion=bastion_host2
command ssh -A "$bastion" "[email protected]"
}
您的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脚本的逻辑中。
很酷,谢谢!是否有任何理由我不会仅仅做 'ssh -A $ onehost $ {2:+ - W $ 1:$ 2}' 作为现有Proxycommand的更直接副本? –
在此脚本中,通过从bash数组中选择随机数组元素来设置'$ onehost'变量。你的ProxyCommand是由你的shell执行的,所以只要你的shell是bash,我不明白你为什么不能在一行中包含这个脚本的全部功能,尽管我没有尝试过。我这样回答,因为我不知道你使用bash作为你的默认shell。 (在我的系统中,我使用bash编程,但tcsh是我的默认shell。) – ghoti
@BobRisky:添加了一个将脚本嵌入到单个ProxyCommand行的选项。 :) – ghoti