2011-05-28 37 views
1

我使用ssh2_scp_send()函數通過ssh方式將文件從服務器發送到另一臺服務器。 測試腳本和真正的應用程序在我的Ubuntu工作站,它與遠程服務器之間以及我的Windows PC和我的辦公室的CentOS 5.0 Linux服務器之間運行得很好。 在我的客戶中,ssh2_scp_send()停止,返回false,並且發送的文件被截斷(對於6.5MB,2MB)。發送者和接收者服務器同時使用CentOS 5.5,並且是Vmware Vsphere虛擬機監控程序上的虛擬服務器。兩者之間有一個虛擬的本地網絡。 較小的文件不會被截斷。每臺服務器上有足夠的磁盤空間。ssh2_scp_send()無法將整個文件轉移到一臺服務器上

下面是測試腳本:

<?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(),以及較慢。

我怎麼理解爲什麼轉移掛?目標服務器上的sshd日誌只顯示連接和斷開連接。

感謝

回答

0

事實上,我的客戶今天早上告訴我,ssh2_sftp/fopen/fwrite/fclose解決方案比ssh2_scp_send()更好。我讀取和fwrite()數據塊爲512kb。他的第一個答案是不準確的。 但我仍然不明白爲什麼ssh2_scp_send()運行在幾個盒子上,而不是其他人(也許stefgosselin有部分答案)。

0

在窗口ssh_scp似乎保持連接,並在緩衝文件掛在那裏。

嘗試進行顯式調用「退出」關閉會話(沖洗文件內容到磁盤):

如果
<?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'); 

不知道這將解決您的問題,但它可能是值得一試。

+0

函數ssh2_scp_send()停止一個錯誤狀態,在我的情況下,我只有一個Linux的盒子,但我會嘗試。 – 2011-05-29 15:08:47

相關問題