2015-01-15 8 views
5

PHPでSSHセッションの圧縮を有効にする際に問題があります。コードの警告:ssh2_connect():サーバーからクライアントへのCOMPメソッドのオーバーライドに失敗しました

パート:(HTTPDまたはPHPのCLIを経由して)実行中

$methods = array(
    'server_to_client' => array(
     'comp' => 'zlib') 
    );if(!($con = ssh2_connect("10.214.201.31", 22, $methods))){ 
    ... 

警告:ssh2_scp_recvを介してテストファイルをダウンロードする

Warning: ssh2_connect(): Failed overriding server to client COMP method 

圧縮は動作しません(時間は変更されませんでした)。クライアントからサーバーへの圧縮をセットアップした後の同様の警告。

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の追加情報がありません。

この問題をどのように調査すればよいですか?

+0

パテッティをサーバーにSSHで使用できますか(証明書が機能していることを証明するため)? Puttyで "Enable Compression"を選択したことを確認してください – Raptor

+0

はい、login/passは良いですが、このコードはうまくいきます(ダウンロードが遅すぎます)ので、圧縮を追加して実行時間を節約しようとしています。 – Konstantin

+0

PuTTYログを投稿できますか? 「圧縮を有効にする」チェックボックスがチェックされているからといって、必ずしも圧縮*が使用されているわけではありません。ロギングを有効にすると、パテログを取得できます。これを行うには、PuTTY-> Session-> Loggingに行き、 "SSH packets"ラジオボタンをチェックします。 – neubert

答えて

0

これは、libssh php5のバージョンがコンパイルされたときに問題が発生する可能性があります。私のデスクトップでこれを試してみて、同じ問題に遭遇しました。

> ssh -C -vv [email protected] 
... 
debug1: SSH2_MSG_KEXINIT sent 
debug1: SSH2_MSG_KEXINIT received 
debug2: kex_parse_kexinit: diffie-hellman-group14-sha1 
debug2: kex_parse_kexinit: [email protected],[email protected],[email protected],ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,[email protected],[email protected],[email protected],[email protected],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: [email protected],zlib,none 
debug2: kex_parse_kexinit: [email protected],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,[email protected] 
debug2: kex_parse_kexinit: none,[email protected] 
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 [email protected] 
debug2: mac_setup: found hmac-sha1 
debug1: kex: client->server aes128-ctr hmac-sha1 [email protected] 

あなたは私のクライアントは、圧縮方法をサポートしていることがわかります[email protected]zlib、およびnoneサーバーのみ[email protected]noneサポートしているため、鍵交換プロセスは、最終的に[email protected]を使用して落ち着くながら。

残念ながら、圧縮タイプ[email protected]wasn't added to libssh2 until 1.4.3とうん、あなたはそれを推測、私の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の圧縮として[email protected]を使用している場合は、あなたのPHPはlibssh2の1.4.3でに対してコンパイルされることを確認してください。

+0

前にも触れましたが、最新のphpをlibSSHバージョンlibssh2/1.4.3で使用しています。 WinSCPまたはパテ接続(圧縮あり)の場合、Wiresharkはサーバーからの "Key Exchange Init"メッセージの圧縮として 'none、zlib @ openssh.com'を表示し、クライアントからのメッセージ/応答の' zlib、none'を表示します。 php ssh2接続の場合、Wiresharkkはサーバからの同じ「Key Exchange Init」メッセージを表示し、クライアントからのメッセージ/応答の圧縮としては「none」のみを表示します。ですから、 '@ openssh.com'は圧縮の評価において意味がありません。 – Konstantin