当并行执行多个scps时,为什么scp偶尔会失败?

时间:2016-04-15 18:44:27

标签: linux ssh scp openssh

我有一个小应用程序试图执行十几个并行“scp”运行,从远程系统中提取文件。通常,它运行良好。 有时,scp中的一个或两个悄然死亡。 (如果从Linux中撤出,则“安静”。如果从HP-UX撤出,我会收到消息 比如同意连接重置。)

如果我在我的scp命令中添加“-v”,那么当发生故障时,我会发现我是 获取“ssh_exchange_identification:读取:通过对等方重置连接” (在Linux上......没有在HP-UX上尝试过-v)。

这是典型运行的“scp -v”输出,其中“坏”的点 跑,并表示'好'的分歧:

Executing: program /usr/bin/ssh host wilbur, user (unspecified), command scp -v -p -f /home/sieler/source/misc/[p-q]*.[ch]
OpenSSH_6.9p1, LibreSSL 2.1.8
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 51: Applying options for *
debug1: Connecting to wilbur [10.84.3.61] port 22.
debug1: Connection established.
debug1: identity file /Users/sieler/.ssh/id_rsa type 1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/sieler/.ssh/id_rsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/sieler/.ssh/id_dsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/sieler/.ssh/id_dsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/sieler/.ssh/id_ecdsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/sieler/.ssh/id_ecdsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/sieler/.ssh/id_ed25519 type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/sieler/.ssh/id_ed25519-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.9

'bad'和'good'匹配到此为止,然后......

为:

ssh_exchange_identification: read: Connection reset by peer

好:

debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH_5* compat 0x0c000000
debug1: Authenticating to wilbur:22 as 'sieler'
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr umac-64@openssh.com none
debug1: kex: client->server aes128-ctr umac-64@openssh.com none
...

虽然脚本和scp运行的常用主机是运行OS X 10.11.4的Mac,但问题已经从几种组合中复制出来了 Mac / Linux / HP-UX(足以排除它是Mac或HP-UX特定问题)。

IIRC,使用scp从Linux拉到Mac有问题, 以及从HP-UX到Mac,从Linux迁移到HP-UX 尚未尝试从Mac或HP-UX拔出Linux。

scp / ssh / openssh是否存在并行使用有时失败的问题?

如果我使用sshd在Linux系统上运行-ddd,那么恶魔就会停止 第一个scp访问它(scp没有问题), 而另外11个scp运行失败。

由于

1 个答案:

答案 0 :(得分:2)

这可能是sshd_config中并行会话的限制造成的。默认情况下,服务器配置为执行“随机早期丢弃”,这意味着如果活动量大于某个限制,则拒绝新连接。负责任的选项是MaxStartups(来自人sshd_config):

  

<强> MaxStartups

     

指定SSH守护程序的最大并发未经身份验证的连接数。在身份验证成功或LoginGraceTime到期之前,将删除其他连接。默认值为10:30:100。

     

或者,可以通过指定三个冒号分隔值“start:rate:full”(例如“10:30:60”)来启用随机早期丢弃。如果当前有“start”(10)未经认证的连接,则sshd(8)将拒绝连接尝试,概率为“rate / 100”(30%)。如果未经身份验证的连接数达到“满”(60),则概率会线性增加并且所有连接尝试都会被拒绝。

将值压缩到比预期的连接数量更大的值可以解决您的问题。否则,您可以在LogLevel DEBUG3中设置sshd_config以查看系统日志中的更多日志。

当您连接到同一台服务器时,最好使用连接多路复用。它会更快,你不会遇到这些问题。查看ControlMaster中的ssh_config选项,或者只需查看my similar answer即可快速浏览此“神奇”。