如何执行存储在变量中的多行 ssh 命令

如何执行存储在变量中的多行 ssh 命令

上下文:我正尝试在无法直接访问的远程机器上执行一组命令 - 我首先必须通过 ssh 进入网关机器,然后从那里通过 ssh 运行命令。

基本上,我想要的是一种打包一组命令的方法,我可以通过任意数量的 ssh 级别传递这些命令。这能做到吗?我怀疑最好的答案是使用 scp 复制脚本,然后运行它,这是一个选择。

请注意,我使用 hostname 命令来显示正在发生的事情 - 这不是我真正想要做的!

从执行单个 ssh 的命令开始,并在那里运行一组多行命令:

ssh gateway.my.company "
  hostname;
  hostname;
"

这很好用。输出类似于:

target_machine
target_machine

然后我将命令集存储在一个变量中,并将其传入:

command="
  hostname;
  hostname;
"
ssh gateway.my.company $command

输出完全相同 - 两个hostname命令都在目标上执行。

接下来,我添加额外的 ssh 跳转(到私有机器):

ssh gateway.my.company ssh target_machine_ip $command

这次两个hostname命令在不同的机器上运行:

target_machine
gateway_machine

看来我可以通过将 cmd 括在转义引号中(即\"$command\")来解决此步骤,但如果我这样做,那么我必须针对直接情况以不同的方式对其进行包装,因为ssh gateway.my.company \"$command\"不再起作用

注意:我知道命令不应该存储在变量中而是存储在函数中,但是由于我使用的是 ssh,所以一旦我通过 ssh 进入下一个服务器,我声明的任何函数都不会存在。

编辑:原始问题省略了第二跳,抱歉!

答案1

你只缺少了一些引文:

ssh gateway.my.company "$command"

相关内容