ssh 连接的 MaxStartups 和 MaxSessions 配置参数?

ars*_*nal 4 linux scp sshd gnu-parallel

我从复制文件machineBmachineCmachineA,因为我跑在我下面的shell脚本machineA

如果文件不在那里,machineB那么它machineC肯定应该在那里,所以我会先尝试复制文件machineB,如果它不在那里,machineB那么我会尝试从machineC.

我正在使用 GNU Parallel 库并行复制文件,并且工作正常。目前我正在并行复制 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."
Run Code Online (Sandbox Code Playgroud)

问题陈述:-

使用上面的脚本在某个时候(不是每次)我得到这个异常 -

ssh_exchange_identification: Connection closed by remote host
ssh_exchange_identification: Connection closed by remote host
ssh_exchange_identification: Connection closed by remote host
Run Code Online (Sandbox Code Playgroud)

我猜这个错误通常是由太多的 ssh/scp 同时启动造成的。这让我相信 /etc/ssh/sshd_config:MaxStartups 和 MaxSessions 设置得太低。

但我的问题是它在哪个服务器上很低?machineBmachineCmachineA?我需要在哪些机器上增加数量?

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
Run Code Online (Sandbox Code Playgroud)

而在machineBmachineC这是我能找到-

[root@machineB ~]$ grep MaxStartups /etc/ssh/sshd_config
#MaxStartups 10

[root@machineB ~]$ grep MaxSessions /etc/ssh/sshd_config
#MaxSessions 10
Run Code Online (Sandbox Code Playgroud)

slm*_*slm 8

如果我正确理解此代码,我相信这是您的问题:

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    
Run Code Online (Sandbox Code Playgroud)

scp并行运行 20 个,但机器 B 和 C 每个只能处理 10 个:

#MaxStartups 10
Run Code Online (Sandbox Code Playgroud)

我会拨回那些平行线说 5,看看是否能解决您的问题。如果你想增加MaxStartups机器 B 和 C 上的数量,你也可以这样做:

MaxStartups 15
Run Code Online (Sandbox Code Playgroud)

并确保sshd在 B 和 C 上重新启动服务:

$ sudo service sshd restart
Run Code Online (Sandbox Code Playgroud)

确认配置文件修改

您可以sshd通过-T开关在测试模式下运行来仔细检查它们是否正常工作。

$ sudo /usr/sbin/sshd -T | grep -i max
maxauthtries 6
maxsessions 10
clientalivecountmax 3
maxstartups 10:30:100
Run Code Online (Sandbox Code Playgroud)