当我在 上运行下面的 shell 脚本时,我正在将文件复制到machineB
其中。machineC
machineA
machineA
如果文件不存在,machineB
那么它肯定应该存在,machineC
所以我将尝试首先复制文件machineB
,如果它不存在,machineB
那么我将尝试从 复制相同的文件machineC
。
我正在使用 GNU 并行库并行复制文件,并且工作正常。目前我正在并行复制 10 个文件。
下面是我的 shell 脚本 -
#!/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
您并行运行 20scp
个,但机器 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。