在循环中使用ssh执行脚本

use*_*337 3 ssh bash

我正在尝试编写一个脚本,我有一个循环来登录到多个远程机器并在每台机器内执行一个脚本.这是一个例子:

for ((j=1; j < 2; j++)); do 

  mchname="n"$j

  ssh -T $mchname <<'ENDSSH'    
    ./run_script < input > output &    
  ENDSSH

done
Run Code Online (Sandbox Code Playgroud)

每当我尝试执行上面的脚本时,我得到:"警告:这里 - 文档在第37行由文件结尾分隔(想要`ENDSSH')"

我是ssh的新手,所以我确信我犯了一个愚蠢的错误.谁能建议我一个解决方案?谢谢.

mrb*_*mrb 13

您的bash脚本中存在问题.heredoc结束标记(脚本中的ENDSSH)不能缩进.

试试这个:

  ssh -T $mchname <<'ENDSSH'    
    ./run_script < input > output &    
ENDSSH
# ^ no indentation for that line
Run Code Online (Sandbox Code Playgroud)

编辑:

此外,您可以通过将其作为参数传递给ssh来运行远程系统上的命令,而不是将其作为标准输入提供.该命令将由用户的远程shell执行:

ssh -T $mchname './run_script < input > output &'
Run Code Online (Sandbox Code Playgroud)