【问题标题】:ssh2_scp_send() fail to transfert the whole file on one serverssh2_scp_send() 无法在一台服务器上传输整个文件
【发布时间】:2011-09-03 20:57:53
【问题描述】:

我使用 ssh2_scp_send() 函数通过 ssh 方式将文件从服务器发送到另一个服务器。 测试脚本和真正的应用程序在我的 Ubuntu 工作站上运行良好,在它和远程服务器之间,在我的 Windows PC 和我办公室的开发 CentOS 5.0 Linux 服务器之间运行。 在我的客户处,ssh2_scp_send() 停止,返回 false,并且发送的文件被截断(6.5MB 为 2MB)。发送方和接收方服务器都使用 CentOS 5.5,并且是 VmWare Vsphere 管理程序上的虚拟服务器。两者之间有一个虚拟局域网。 较小的文件不会被截断。每台服务器都有足够的磁盘空间。

这里是测试脚本:

<?php

$source = '/sourcefile.dat';
$dest = '/destfile.dat';

$serveur = 'sshserver';
$login = 'login';
$sPub = 'public_key';
$sPriv = 'private_key';
$passphrase = 'pass';

$aSSHMethods = array(
        'kex' => 'diffie-hellman-group1-sha1',
        'client_to_server' => array(
                'crypt' => '3des-cbc,aes256-cbc,aes192-cbc,aes128-cbc',
                'comp' => 'none'),
        'server_to_client' => array(
                'crypt' => '3des-cbc,aes256-cbc,aes192-cbc,aes128-cbc',
                'comp' => 'none'),
        );

$rSSH = ssh2_connect($serveur, 22, $aSSHMethods);   
ssh2_auth_pubkey_file($rSSH, $login, $sPub, $sPriv, $passphrase);
ssh2_scp_send($rSSH, $source, $dest);

我尝试用 ssh2_sftp/fopen/fwrite/fclose 替换 ssh2_scp_send(),但运行方式相同,而且速度较慢。

我如何理解 transfert 挂起的原因?目标服务器上的 sshd 日志仅显示连接和断开连接。

谢谢

【问题讨论】:

    标签: php ssh scp


    【解决方案1】:

    事实上,我的客户今天早上告诉我,ssh2_sftp/fopen/fwrite/fclose 解决方案比 ssh2_scp_send() 解决方案运行得更好。我按 512kb 的块读取和 fwrite() 数据。他的第一个答案是不准确的。 但我仍然不明白为什么 ssh2_scp_send() 在几个盒子上运行而不是在其他盒子上运行(也许 stefgosselin 有部分答案)。

    【讨论】:

      【解决方案2】:

      在 Windows 上 ssh_scp 似乎保持连接打开并挂在那里,文件在缓冲区。

      尝试显式调用“exit”以关闭会话(将文件内容刷新到磁盘):

      <?php 
        $objConnection = ssh2_connect($strHost, $strPort, $methods, $callbacks); 
        ssh2_auth_password($objConnection, $strUser, $strPassword); 
        ssh2_scp_send($objConnection , $strSource, $strDest); 
      
        // Add this to flush buffers/close session 
        ssh2_exec($objConnection, 'exit'); 
      

      不确定这是否能解决您的问题,但可能值得一试。

      【讨论】:

      • 函数 ssh2_scp_send() 以错误状态停止,在我的情况下,我只有一个 Linux 机器,但我会尝试。
      猜你喜欢
      • 2011-12-08
      • 1970-01-01
      • 2013-01-28
      • 2011-11-05
      • 1970-01-01
      • 1970-01-01
      • 2014-08-08
      • 1970-01-01
      • 2015-05-13
      相关资源
      最近更新 更多