Bash 通过ssh分发作业

Bash 通过ssh分发作业,bash,loops,ssh,Bash,Loops,Ssh,我想启动几个作业,每个作业在一台机器上,可以通过ssh访问 所以我有一个文件host.txt,包含机器的名称。所有计算机都在同一文件系统上运行。我现在需要一个循环来执行以下操作: for i=1:nrJobs connect to i-th host of host.txt via ssh. (Since I dont want to store passwords, it may ask for it). open a new screen start script.

我想启动几个作业,每个作业在一台机器上,可以通过ssh访问

所以我有一个文件host.txt,包含机器的名称。所有计算机都在同一文件系统上运行。我现在需要一个循环来执行以下操作:

for i=1:nrJobs
    connect to i-th host of host.txt via ssh. (Since I dont want to store passwords, it may ask for it).
    open a new screen 
    start script.sh with parameter $i
    detach screen
end
param=1
for host in $(cat host.txt) do
ssh $host 'bash -s' < script.sh $param
param=$((param+1))
done
特别是,我只想开始工作,不想等待每一项工作完成。因此,我想使用屏幕能够访问每个作业

例如,host.txt可能是:

hostA 
hostB
hostC
hostD
用户名不需要,sudo对我不可用

我的想法是从以下几点开始:

for i=1:nrJobs
    connect to i-th host of host.txt via ssh. (Since I dont want to store passwords, it may ask for it).
    open a new screen 
    start script.sh with parameter $i
    detach screen
end
param=1
for host in $(cat host.txt) do
ssh $host 'bash -s' < script.sh $param
param=$((param+1))
done

所以现在缺少的是如何在脚本中附加和分离屏幕,我想您正在寻找类似的东西

#!/bin/bash
param=1
while read host; do
    screen -dmS "$host-$param" ssh "$host" bash -s < script.sh "$param"
    param=$((param + 1))
done <hosts.txt

就我个人而言,我不会使用Screen来完成这项特定的工作,特别是如果ssh最终可能会要求密码,但您无论如何都希望切换到公钥身份验证,但这应该有助于您开始。

因为我不想存储密码,它可能会要求您使用公钥身份验证。它们都运行相同的作业吗?它们都运行相同的脚本文件,具有不同的参数。将参数写入host.txt中,并在与serverIP相同的行上用空格分隔,然后像这样循环