在PHP中为SSH会话启用压缩时,我遇到了问题。
守则的一部分:
$methods = array(
'server_to_client' => array(
'comp' => 'zlib')
);if(!($con = ssh2_connect("10.214.201.31", 22, $methods))){
...
在执行期间(通过httpd或php cli)发出警告:
Warning: ssh2_connect(): Failed overriding server to client COMP method
压缩不起作用(通过ssh2_scp_recv下载测试文件的时间没有改变)。安装客户端到服务器压缩后的类似警告。
PHP Version 5.5.15 (latest Xampp for Windows)
ZLib Version 1.2.7
libSSH Version libssh2/1.4.3
服务器支持ssh压缩(WinSCP下载速度快5倍)。
无法在php或httpd的日志中找到任何其他信息。
我该如何调查这个问题?
发布于 2015-01-20 14:10:23
这可能是libssh php5编译版本的一个问题。在我的桌面上尝试了这个,并遇到了同样的问题。
> ssh -C -vv root@host.com
...
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug2: kex_parse_kexinit: diffie-hellman-group14-sha1
debug2: kex_parse_kexinit: ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-rsa-cert-v01@openssh.com,ssh-dss-cert-v01@openssh.com,ssh-rsa-cert-v00@openssh.com,ssh-dss-cert-v00@openssh.com,ssh-rsa,ssh-dss
debug2: kex_parse_kexinit: aes128-ctr,aes256-ctr,arcfour256,arcfour
debug2: kex_parse_kexinit: aes128-ctr,aes256-ctr,arcfour256,arcfour
debug2: kex_parse_kexinit: hmac-sha1,hmac-sha1-96,hmac-md5,hmac-md5-96
debug2: kex_parse_kexinit: hmac-sha1,hmac-sha1-96,hmac-md5,hmac-md5-96
debug2: kex_parse_kexinit: zlib@openssh.com,zlib,none
debug2: kex_parse_kexinit: zlib@openssh.com,zlib,none
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit: first_kex_follows 0
debug2: kex_parse_kexinit: reserved 0
debug2: kex_parse_kexinit: ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: ssh-rsa,ssh-dss,ecdsa-sha2-nistp256
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,arcfour
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,arcfour
debug2: kex_parse_kexinit: hmac-sha1,hmac-sha1-96
debug2: kex_parse_kexinit: hmac-sha1,hmac-sha1-96
debug2: kex_parse_kexinit: none,zlib@openssh.com
debug2: kex_parse_kexinit: none,zlib@openssh.com
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit: first_kex_follows 0
debug2: kex_parse_kexinit: reserved 0
debug2: mac_setup: found hmac-sha1
debug1: kex: server->client aes128-ctr hmac-sha1 zlib@openssh.com
debug2: mac_setup: found hmac-sha1
debug1: kex: client->server aes128-ctr hmac-sha1 zlib@openssh.com
您可以看到,我的客户机支持压缩方法zlib@openssh.com
、zlib
和none
,而服务器只支持zlib@openssh.com
和none
,因此密钥交换过程最终决定使用zlib@openssh.com
。
不幸的是,对压缩类型zlib@openssh.com
1.4.3和yup的支持,您猜到了,我的php5.4是用libssh 1.2.7编译的。
> phpinfo(INFO_MODULES);
....
ssh2
SSH2 support => enabled
extension version => 0.11.3-dev
libssh2 version => 1.2.7
banner => SSH-2.0-libssh2_1.2.7
remote forwarding => enabled
hostbased auth => enabled
polling support => enabled
publickey subsystem => enabled
TL;DR:如果WinSCP使用zlib@openssh.com
作为压缩,请确保php是在libssh2 1.4.3处编译的。
https://stackoverflow.com/questions/27960200
复制