Bash 通过ssh分发作业
我想启动几个作业,每个作业在一台机器上,可以通过ssh访问 所以我有一个文件host.txt,包含机器的名称。所有计算机都在同一文件系统上运行。我现在需要一个循环来执行以下操作: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.
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相同的行上用空格分隔,然后像这样循环