我正在写一个SSH配置文件,想要执行一些逻辑。例如:
Host myhost1
ProxyCommand ssh -A {choose randomly between [bastion_host1] and [bastion_host2]} -W %h:%p
是否有可能实现上述使用(bash?)变量?谢谢!
答案 0 :(得分:10)
您的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脚本的逻辑中配置。
答案 1 :(得分:5)
在~/.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
命令。
答案 2 :(得分:5)
没有;任何外部程序都不会处理.ssh/config
。你需要一个沿
ssh () {
(( $RANDOM % 2 )) && bastion=bastion_host1 || bastion=bastion_host2
command ssh -A "$bastion" "$@"
}