Erlang OpenSSH7.3p1服务器正在Solaris中发送带有尾随空间的协议版本?

Erlang OpenSSH7.3p1服务器正在Solaris中发送带有尾随空间的协议版本?,erlang,solaris,openssh,Erlang,Solaris,Openssh,我在Solaris 11操作系统上的OpenSSH_7.3p1(+OpenSSL 1.0.2k)和更高版本遇到了一个奇怪的问题。当它充当服务器时,它发送的是添加了尾随空格的协议版本,如果客户端没有任何空格,如下图所示,它是否可以接受 24 6.134324 192.168.0.5 192.168.10.2 SSHv2 90 Server: Protocol (SSH-2.0-OpenSSH_7.3 ) 84 4.750896 192.168.0.5 192.168.10.9 SSHv2 89 C

我在Solaris 11操作系统上的OpenSSH_7.3p1(+OpenSSL 1.0.2k)和更高版本遇到了一个奇怪的问题。当它充当服务器时,它发送的是添加了尾随空格的协议版本,如果客户端没有任何空格,如下图所示,它是否可以接受

24 6.134324 192.168.0.5 192.168.10.2 SSHv2 90 Server: Protocol (SSH-2.0-OpenSSH_7.3 )
84 4.750896 192.168.0.5 192.168.10.9 SSHv2 89 Client: Protocol (SSH-2.0-OpenSSH_7.3) 
因此,当从我的客户机(Erlang)连接时,它抛出以下错误

{error,{"Key exchange failed",{error,bad_signature}}}
这里我的问题是,正如所提到的,只有在指定注释时才应添加空格。我说得对吗

SSH-protoversion-softwareversion SP comments CR LF
或者我应该修复客户端代码以接受空间


/PRasad.

它被提到,因为只有在指定注释时才应添加空格。不,不是这么说的。RFC声明“如果包含‘注释’字符串,则‘空格’字符(上面表示为SP,ASCII 32)必须分隔‘softwareversion’和‘comments’字符串。”RFC未指定空格是否为必需、可选或禁止。因为空格被列为协议版本字符串的一部分,所以我看不到任何使空格错误的RFC的合理解释。事实上,我想说你可以合理地说空格是必需的。“protoversion”和“softwareversion”字符串必须由可打印的US-ASCII字符组成,空白字符和减号(-)除外
SSH-2.0-billssh_3.6.3q3
在RFC4253的另一个声明中,协议或软件版本字符串中不允许有空格。这只是说protoversion和softwareversion中不能有空格或减号。它根本不涉及尾随空格。RFC的确切引用是:因此,有效标识字符串的示例是
SSH-2.0-billssssh_3.6.3q3
,该示例绝不排除“softwareversion”字符串后面和尾随前的空格。OpenSSH本身是否连接到服务器?如果是这样,为什么您认为您对RFC的解释比OpenSSH开发人员的解释更好?这只是说protoversion和softwareversion中不能有空格或负号。它根本不涉及尾随空格。我不同意你的看法。为什么,因为RFC没有指定任何尾随空格。但是,如果我接受一个带有空格(anywhere)的字符串,则意味着允许它包含空格char。OpenSSH本身是否连接到服务器?是的,它接受空格字符。为什么您认为您对RFC的解释比OpenSSH开发人员的解释更好?我见过其他客户由于相同的空间而失败。原因是服务器正在考虑软件版本字符串中的空格来准备签名。请不要把它当作争论。