에서 아래 쉘 스크립트를 실행하면 파일이 복사됩니다 machineB
.machineC
machineA
machineA
파일이 없으면 machineB
분명히 존재해야 하므로 machineC
먼저 파일을 복사해 보고 machineB
, 없으면 machineB
에서 동일한 파일을 복사해 보겠습니다 machineC
.
저는 GNU 병렬 라이브러리를 사용하여 파일을 병렬로 복사하고 있는데 잘 작동합니다. 현재 10개의 파일을 병렬로 복사하고 있습니다.
아래는 내 쉘 스크립트입니다 -
#!/bin/bash
export PRIMARY=/test01/primary
export SECONDARY=/test02/secondary
readonly FILERS_LOCATION=(machineB machineC)
export FILERS_LOCATION_1=${FILERS_LOCATION[0]}
export FILERS_LOCATION_2=${FILERS_LOCATION[1]}
PRIMARY_PARTITION=(550 274 2 546 278) # this will have more file numbers
SECONDARY_PARTITION=(1643 1103 1372 1096 1369 1568) # this will have more file numbers
export dir3=/testing/snapshot/20140103
find "$PRIMARY" -mindepth 1 -delete
find "$SECONDARY" -mindepth 1 -delete
do_Copy() {
el=$1
PRIMSEC=$2
scp david@$FILERS_LOCATION_1:$dir3/new_weekly_2014_"$el"_200003_5.data $PRIMSEC/. || scp david@$FILERS_LOCATION_2:$dir3/new_weekly_2014_"$el"_200003_5.data $PRIMSEC/.
}
export -f do_Copy
parallel --retries 10 -j 10 do_Copy {} $PRIMARY ::: "${PRIMARY_PARTITION[@]}" &
parallel --retries 10 -j 10 do_Copy {} $SECONDARY ::: "${SECONDARY_PARTITION[@]}" &
wait
echo "All files copied."
문제 설명:-
위 스크립트를 어느 시점에서(매번은 아님) 사용하면 다음과 같은 예외가 발생합니다.
ssh_exchange_identification: Connection closed by remote host
ssh_exchange_identification: Connection closed by remote host
ssh_exchange_identification: Connection closed by remote host
이 오류는 일반적으로 동시에 너무 많은 ssh/scp를 시작했기 때문에 발생하는 것 같습니다. 이로 인해 /etc/ssh/sshd_config:MaxStartups 및 MaxSessions가 너무 낮게 설정되었다고 생각됩니다.
하지만 내 질문은 어느 서버에서 꽤 낮은가요? machineB
그리고 machineC
/또는 machineA
? 어떤 기계에서 수량을 늘려야 합니까?
machineA
내가 찾은 내용은 다음과 같습니다. 모두 주석 처리되어 있습니다 .
root@machineA:/home/david# grep MaxStartups /etc/ssh/sshd_config
#MaxStartups 10:30:60
root@machineA:/home/david# grep MaxSessions /etc/ssh/sshd_config
제가 찾을 수 있었던 machineB
것은 바로 이것 입니다 -machineC
[root@machineB ~]$ grep MaxStartups /etc/ssh/sshd_config
#MaxStartups 10
[root@machineB ~]$ grep MaxSessions /etc/ssh/sshd_config
#MaxSessions 10
답변1
이 코드를 올바르게 이해했다면 이것이 문제라고 생각합니다.
do_Copy() {
el=$1
PRIMSEC=$2
scp david@$FILERS_LOCATION_1:$dir3/new_weekly_2014_"$el"_200003_5.data \
$PRIMSEC/. || \
scp david@$FILERS_LOCATION_2:$dir3/new_weekly_2014_"$el"_200003_5.data \
$PRIMSEC/.
}
export -f do_Copy
parallel --retries 10 -j 10 do_Copy {} \
$PRIMARY ::: "${PRIMARY_PARTITION[@]}" &
parallel --retries 10 -j 10 do_Copy {} \
$SECONDARY ::: "${SECONDARY_PARTITION[@]}" &
wait
20개를 병렬로 실행 scp
하지만 시스템 B와 C는 10개만 처리할 수 있습니다.
#MaxStartups 10
나는 그 평행선을 5로 다시 돌려 문제가 해결되는지 확인하겠습니다. 기계 B와 C의 수량을 늘리려면 MaxStartups
다음을 수행할 수도 있습니다.
MaxStartups 15
그리고 sshd
B와 C에서 서비스를 다시 시작해야 합니다.
$ sudo service sshd restart
구성 파일 수정 확인
sshd
테스트 모드에서 스위치를 실행하여 제대로 작동하는지 다시 확인할 수 있습니다 -T
.
$ sudo /usr/sbin/sshd -T | grep -i max
maxauthtries 6
maxsessions 10
clientalivecountmax 3
maxstartups 10:30:100
답변2
--sshdelay 또는 --filter-hosts 사용을 고려하세요.