上下文:我正尝试在无法直接访问的远程机器上执行一组命令 - 我首先必须通过 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"