通过ssh分配作业

时间:2014-06-06 13:21:59

标签: 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.sh with parameter $i
    detach screen
end

特别是,我只是想开始工作,而不想等待每项工作完成。因此,我想使用屏幕来访问每个作业。

作为示例,host.txt可能是:

hostA 
hostB
hostC
hostD

不需要用户名,我也无法使用sudo。

我的想法是从以下开始:

param=1
for host in $(cat host.txt) do
ssh $host 'bash -s' < script.sh $param
param=$((param+1))
done

现在缺少的是如何在脚本中附加和分离屏幕

1 个答案:

答案 0 :(得分:0)

我猜你正在寻找这样的东西。

#!/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最终可能要求输入密码,但您仍希望切换到公钥验证)但这应该有助于您开始使用