【发布时间】: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 日志仅显示连接和断开连接。
谢谢
【问题讨论】: