並列ネットワークのためのSSHによるbashループ

並列ネットワークのためのSSHによるbashループ

並列ネットワークに4つのCPUがあり、4つのCPUのそれぞれでNつのジョブを実行しようとしています。また、NジョブをXジョブに分割し、4つのCPUそれぞれでループで実行したいと思います。 Bashスクリプトは次のとおりです。

#!/bin/bash
runevents() {
   nEvents=5000
   nJobs=100
   ePerJob=$((nEvents/nJobs))
   ssh $1
   for ((i=0; i<nJobs; i++))
   do
      dir_run=/home/user/task/
      "cd $dir_run && nice -n0 ./commandscript -c commandscipt.cmnd -o results/job_$RANDOM -s $RANDOM -n $ePerJob >$dir_run/job_$RANDOM.out"
   done
}

runevents cpu1
runevents cpu2 
runevents cpu3
runevents cpu4

exit

しかし、これは期待どおりに機能しませんでした。ファイルやパスが存在しないというエラーが発生します。ファイルまたはパスが存在し、パスが正しいです。また、行を次のように変更すると:

ssh $1 "cd $dir_run && nice -n0 ./commandscript -c commandscipt.cmnd -o results/job_$RANDOM -s $RANDOM -n $ePerJob >$dir_run/job_$RANDOM.out" うまくいきますが、nJobsのようにパスワードを何度も尋ねるのはとんでもないアプローチです。私はリモートコンピュータ(例えば、cpu1(パラレルネットワークの一部))でssh-keygenを使用しています。ここでcommandscript.cc鍵ペアを生成するためにコンパイルし、秘密鍵はとに保存ssh-keygen -t rsaされ、公開鍵はとに保存されます。この状況を解決する方法についての洞察力はありますか?パラレルネットワークへのsudoアクセス権がありません。id_rsaauthorized_keysid_rsa.pubauthorized_keys.pub

ベストアンサー1

nJobsと同じくらいパスワードを求めるのは不可能なアプローチです。

を使用してSSHキーペアを作成し、リモートシステムにアクセスできるユーザーとして/ssh-keygenとしてログインし、そのペアの公開キーをに保存します。不要。sshscp~/.ssh/authorized_keyssudo

しかし、これは期待どおりに機能しませんでした。 [...]その行を次のように変更すると:

この問題を直接解決しました。

また、見ることができます平行そしてリモートホストのリスト。スクリプト時間を節約できます。

おすすめ記事