【问题标题】:Can an ~/.ssh/config file use variables?~/.ssh/config 文件可以使用变量吗?
【发布时间】:2016-02-02 20:25:37
【问题描述】:

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

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

是否可以使用(bash?)变量来实现上述目标?谢谢!

【问题讨论】:

    标签: bash ssh config


    【解决方案1】:

    您的代理命令可以是一个 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
    

    未经测试。您的里程可能会有所不同。可能含有坚果。


    更新:

    每个 cmets,我已经测试了以下内容,并且效果也很好:

    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 的更直接副本?
    • 在这个脚本中,$onehost 变量是通过从 bash 数组中选择一个随机数组元素来设置的。你的 ProxyCommand 由你的 shell 执行,所以只要你的 shell 是 bash,我不明白为什么你不能在一行中包含这个脚本的全部功能,尽管我没有尝试过。我这样回答是因为我不知道您使用 bash 作为默认 shell。 (在我的系统上,我使用 bash 进行编程,但 tcsh 是我的默认 shell。)
    • @BobRisky:添加了将脚本嵌入到单个 ProxyCommand 行的选项。 :)
    • “可能含有坚果”让我笑了!
    • 也赞成坚果警告。六年前的答案仍然新鲜!
    【解决方案2】:

    ~/.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 命令。

    【讨论】:

      【解决方案3】:

      没有; .ssh/config 未被任何外部程序处理。你需要一个类似于

      的shell函数
      ssh () {
          (( $RANDOM % 2 )) && bastion=bastion_host1 || bastion=bastion_host2
      
          command ssh -A "$bastion" "$@"
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-06-06
        • 2019-02-22
        • 1970-01-01
        • 2020-08-13
        • 2011-05-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多