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

Bob*_*sky 16 ssh bash config

我正在写一个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脚本的逻辑中.

  • “可能含有坚果”让我笑了! (3认同)

Sto*_*ica 6

~/.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使用适当的参数运行实际命令.


che*_*ner 5

没有; .ssh/config没有任何外部程序处理.你需要一个shell函数

ssh () {
    (( $RANDOM % 2 )) && bastion=bastion_host1 || bastion=bastion_host2

    command ssh -A "$bastion" "$@"
}
Run Code Online (Sandbox Code Playgroud)