簡體   English   中英

ssh2_scp_send() 無法在一台服務器上傳輸整個文件

[英]ssh2_scp_send() fail to transfert the whole file on one server

我使用 ssh2_scp_send() function 通過 ssh 方式將文件從服務器發送到另一個服務器。 The test script and the real application run just fine on my Ubuntu workstation, between it and a distant server, and between my Windows PC and a development CentOS 5.0 Linux server at my office. 在我的客戶處,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(),但它的運行方式相同,而且速度較慢。

我怎樣才能理解傳輸掛起的原因? 目標服務器上的 sshd 日志僅顯示連接和斷開連接。

謝謝

在 windows 上,ssh_scp 似乎保持連接打開並掛在那里,文件在緩沖區。

嘗試顯式調用“exit”以關閉 session(將文件內容刷新到磁盤):

<?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_sftp/fopen/fwrite/fclose 解決方案比 ssh2_scp_send() 解決方案運行得更好。 我按 512kb 的塊讀取和 fwrite() 數據。 他的第一個答案是不准確的。 但我仍然不明白為什么 ssh2_scp_send() 在幾個盒子上運行而不是在其他盒子上運行(也許 stefgosselin 有部分答案)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM