我正在写一个SSH配置文件,想要执行一些逻辑.例如:
Host myhost1
ProxyCommand ssh -A {choose randomly between [bastion_host1] and [bastion_host2]} -W %h:%p
Run Code Online (Sandbox Code Playgroud)
是否有可能实现上述使用(bash?)变量?谢谢!
gho*_*oti 12
您的proxycommand可以是shell脚本.
host myhost1
ProxyCommand $HOME/bin/selecthost %h %p
Run Code Online (Sandbox Code Playgroud)
然后在~/bin/selecthost:
#!/usr/bin/env bash
hosts=(bastion1 bastion2)
onehost=${hosts[$RANDOM % ${#hosts[@]}]}
ssh -x -a -q ${2:+-W $1:$2} $onehost
Run Code Online (Sandbox Code Playgroud)
未经测试.你的milage可能会有所不同.可能含有坚果.
更新:
根据评论,我测试了以下内容,它也很好用:
host myhost1 myhost2
ProxyCommand bash -c 'hosts=(bastion1 bastion2); ssh -xaqW%h:22 ${hosts[$RANDOM % ${#hosts[@]}]}'
Run Code Online (Sandbox Code Playgroud)
当然,此方法不允许您为每个主机指定一个自定义端口,如果hostssh配置中相同条目中的多个主机需要,您可以将其添加到单独的shell脚本的逻辑中.
在~/.ssh/config你不能有太多的逻辑,并没有击.该文件的手册是man ssh_config,并没有提到这个功能.
您可以做的是创建一个具有您需要的逻辑的脚本,并使您对该脚本进行ssh配置调用.有点像:
ProxyCommand sudo /root/bin/ssh-randomly.sh [bastion_host1] [bastion_host2]
Run Code Online (Sandbox Code Playgroud)
并编写一个Bash脚本/root/bin/ssh-randomly.sh来获取两个主机名参数,随机选择其中一个,并ssh使用适当的参数运行实际命令.
没有; .ssh/config没有任何外部程序处理.你需要一个shell函数
ssh () {
(( $RANDOM % 2 )) && bastion=bastion_host1 || bastion=bastion_host2
command ssh -A "$bastion" "$@"
}
Run Code Online (Sandbox Code Playgroud)