〜/ .ssh / config文件可以使用变量吗?

时间:2015-11-02 20:33:19

标签: bash ssh config

我正在写一个SSH配置文件,想要执行一些逻辑。例如:

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

是否有可能实现上述使用(bash?)变量?谢谢!

3 个答案:

答案 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。你需要一个沿

行的shell函数
ssh () {
    (( $RANDOM % 2 )) && bastion=bastion_host1 || bastion=bastion_host2

    command ssh -A "$bastion" "$@"
}