~/.ssh/config 文件可以使用变量吗?
Can an ~/.ssh/config file use variables?
我正在编写一个 SSH 配置文件并想执行一些逻辑。例如:
Host myhost1
ProxyCommand ssh -A {choose randomly between [bastion_host1] and [bastion_host2]} -W %h:%p
是否可以使用 (bash?) 变量实现上述目标?谢谢!
在~/.ssh/config
中你不能有太多的逻辑,也没有Bash。此文件的手册在 man ssh_config
中,但没有提及此功能。
您可以做的是创建一个具有您需要的逻辑的脚本,并让您通过 ssh 配置调用该脚本。
大致如下:
ProxyCommand sudo /root/bin/ssh-randomly.sh [bastion_host1] [bastion_host2]
并编写一个 Bash 脚本 /root/bin/ssh-randomly.sh
获取两个主机名参数,select 其中一个随机,运行 真正的 ssh
命令适当的参数。
否; .ssh/config
未被任何外部程序处理。您需要一个 shell 函数,类似于
ssh () {
(( $RANDOM % 2 )) && bastion=bastion_host1 || bastion=bastion_host2
command ssh -A "$bastion" "$@"
}
您的 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 :} $onehost
未经测试。你的旅费可能会改变。可能含有坚果。
根据评论,我还测试了以下内容,效果很好:
host myhost1 myhost2
ProxyCommand bash -c 'hosts=(bastion1 bastion2); ssh -xaqW%h:22 ${hosts[$RANDOM % ${#hosts[@]}]}'
当然,此方法不允许您为每个主机指定自定义端口。如果您的 SSH 配置与同一 host
条目中的多个主机匹配,您可以将其添加到单独的 shell 脚本的逻辑中。
我正在编写一个 SSH 配置文件并想执行一些逻辑。例如:
Host myhost1
ProxyCommand ssh -A {choose randomly between [bastion_host1] and [bastion_host2]} -W %h:%p
是否可以使用 (bash?) 变量实现上述目标?谢谢!
在~/.ssh/config
中你不能有太多的逻辑,也没有Bash。此文件的手册在 man ssh_config
中,但没有提及此功能。
您可以做的是创建一个具有您需要的逻辑的脚本,并让您通过 ssh 配置调用该脚本。 大致如下:
ProxyCommand sudo /root/bin/ssh-randomly.sh [bastion_host1] [bastion_host2]
并编写一个 Bash 脚本 /root/bin/ssh-randomly.sh
获取两个主机名参数,select 其中一个随机,运行 真正的 ssh
命令适当的参数。
否; .ssh/config
未被任何外部程序处理。您需要一个 shell 函数,类似于
ssh () {
(( $RANDOM % 2 )) && bastion=bastion_host1 || bastion=bastion_host2
command ssh -A "$bastion" "$@"
}
您的 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 :} $onehost
未经测试。你的旅费可能会改变。可能含有坚果。
根据评论,我还测试了以下内容,效果很好:
host myhost1 myhost2
ProxyCommand bash -c 'hosts=(bastion1 bastion2); ssh -xaqW%h:22 ${hosts[$RANDOM % ${#hosts[@]}]}'
当然,此方法不允许您为每个主机指定自定义端口。如果您的 SSH 配置与同一 host
条目中的多个主机匹配,您可以将其添加到单独的 shell 脚本的逻辑中。