여러 서버에 SSH로 연결하고 파일을 하나의 서버로 병합

여러 서버에 SSH로 연결하고 파일을 하나의 서버로 병합

다음 코드를 사용하여 하나의 서버에서 이 작업을 수행할 수 있습니다.

ssh server001 << EOF
cat /dir/file001.txt >> somefile
EOF

여러 서버를 사용하면 내 스크립트가 서버에 SSH로 연결할 수 있지만 어떤 이유로 내 file00x 파일을 찾을 수 없으며 cat: /dir/file00x.txt: No such file or directory파일이 존재하더라도 다음 오류가 발생합니다.

이것은 내 코드입니다.

 for i in {10..15}; do
    ssh $i      //for simplicity, theres some text manipulation to get the actual name of the server
    cat /tmp/$i.txt
 done << newfile.txt

나는 또한 이 방법을 시도했지만(분명히 올바른 방법은 아님) 여전히 파일을 찾을 수 없습니다.

 for i in {10..15}; do
    ssh $i      
    cat /tmp/$i.txt >> newfile.txt
 done 

또한 이것을 시도했지만 그 중 하나도 작동하지 않았습니다.

 for i in {10..15}; do
    ssh $i  << EOF    
    cat /tmp/$i.txt >> newfile.txt
    EOF
 done 

답변1

제가 질문을 이해하는 한, 원격 시스템에 대한 액세스가 필요하며 /tmp/$i.txt어디에서 액세스하는지는 중요하지 않습니다.newfile.txt

이 경우 우리는 HERE 파일이나 영리함에 대해 걱정할 필요가 없습니다.

ssh $i cat /tmp/$i.txt >> newfile.txt

cat원격 시스템에서 실행되지만 로컬로 연결됩니다.

그런 다음 다음을 반복할 수 있습니다.

for i in {10..15}
do
  ssh $i cat /tmp/$i.txt >> newfile.txt
done

반대로 원격 시스템에서도 리디렉션이 발생하도록 하려면 다음 명령을 인용할 수 있습니다.

for i in {10..15}
do
  ssh $i "cat /tmp/$i.txt >> newfile.txt"
done

이제 cat $i.txt >> newfile.txt원격 컴퓨터에서 이런 일이 발생합니다.

이는 설정에서 중요하지 않습니다.

관련 정보