SSH, for 루프 및 파일 터치를 동시에 수행할 수 있나요?

SSH, for 루프 및 파일 터치를 동시에 수행할 수 있나요?
for account in ${accounts}
do
        `ssh -q id@server "touch EVENTS_${account}_${date}.log"`
done

여러 번 SSH를 실행하는 대신 SSH를 통해 for 루프를 실행하고 파일을 터치할 수 있나요?

답변1

ssh를 사용하면 여러 명령을 실행할 수 있습니다. 각 명령을 세미콜론으로 구분하면 됩니다.

command=": "
for account in ${accounts}
do
        command=$command"; touch EVENTS_${account}_${date}.log"
done
ssh -q id@server "$command"

모든 ":"은 "다음 명령을 계속합니다"를 의미합니다. 이렇게 하면 명령이 세미콜론으로 시작되지 않습니다.

또한 명령 주위에 백틱을 사용할 필요가 없습니다.

답변2

원격 컴퓨터에서 루프를 실행합니다.

ssh -q id@server "for account in ${accounts}; do touch EVENTS_\${account}_${date}.log; done"

$accounts에는 $date쉘 특수 문자( )가 포함되어 있지 않다고 가정합니다 "$'()&;<>[\]`{|}~. 특히 $accounts원격 셸에 삽입된 다음 거기서 해석됩니다. 특수 문자를 보호해야 하는 경우 인용에 더욱 주의해야 합니다.

q=\'\\\'\'  # '\'' effectively quotes a single quote inside single quotes
ssh -q id@server 'for account in '\'"${accounts//\'/$q}"\''; do touch "EVENTS_${account}_${date}.log"; done'

또는 다음 명령을 사용하여 원격 파일 시스템을 마운트합니다.sshfs마치 현지인처럼 운영됩니다.

mkdir mnt
sshfs id@server mnt
for account in ${accounts}; do touch "mnt/EVENTS_\${account}_${date}.log"; done

답변3

클러스터sh당신이 하고 싶은 일을 위한 완벽한 도구인 것 같습니다.

ClusterSSH는 동시에 여러 서버에서 동일한 변경을 수행할 수 있는 도구입니다. "cssh" 명령은 지정된 모든 호스트의 관리 콘솔과 xterm을 엽니다. 관리 콘솔에 입력된 모든 텍스트는 모든 창에 복사됩니다. 모든 창에서는 직접 입력도 가능합니다.

이 도구는 클러스터 내의 모든 노드에서 동일한 구성이나 명령을 실행해야 하는 클러스터 관리에 적합하지만 이에 국한되지는 않습니다. 이 도구를 통해 이러한 명령을 한 번 실행하면 모든 노드가 동기화된 상태로 유지됩니다.

관련 정보