machineB
で以下のシェルスクリプトを実行しているときに、machineC
およびmachineA
からmachineA
にファイルをコピーしています。
ファイルがmachineB
にない場合は、確かにmachineC
にあるはずです。そのため、最初にmachineB
からファイルをコピーし、machineB
にない場合は、machineC
から同じファイルをコピーします。
GNU Parallelライブラリを使用してファイルを並列にコピーしていますが、正常に動作しています。現在、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
このコードを正しく理解していれば、これはあなたの問題だと思います:
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
また、BとCの両方でsshd
サービスを必ず再起動してください。
$ Sudo service sshd restart
-T
スイッチを介してテストモードでsshd
を実行することにより、それらが機能していることを再確認できます。
$ Sudo /usr/sbin/sshd -T | grep -i max
maxauthtries 6
maxsessions 10
clientalivecountmax 3
maxstartups 10:30:100
--sshdelayまたは--filter-hostsの使用を検討してください。