我有一个小应用程序试图执行十几个并行“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特定问题)。
scp
从Linux拉到Mac有问题,
以及从HP-UX到Mac,从Linux迁移到HP-UX
尚未尝试从Mac或HP-UX拔出Linux。
scp
/ ssh
/ openssh
是否存在并行使用有时失败的问题?
如果我使用sshd
在Linux系统上运行-ddd
,那么恶魔就会停止
第一个scp
访问它(scp
没有问题),
而另外11个scp
运行失败。
由于
答案 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即可快速浏览此“神奇”。