병렬 네트워크를 위해 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

그러나 이는 예상대로 작동하지 않았습니다. [...] 해당 줄을 다음과 같이 수정하면:

이 문제를 직접 해결하셨습니다.

당신은 또한 볼 수 있습니다평행한그리고 원격 호스트 목록. 스크립팅 시간을 절약할 수 있습니다.

관련 정보