2017-10-03 29 views
2

Net:SSH2を使用してscp_putを使用してリモートサーバーにファイルを配置しています。 これは、不明なエラーを返します。Perl Net :: SSH2 scp_putが不明なエラーを返します

-43, LIBSSH2_ERROR_UNKNOWN(-43), SCP failure

それは返すために数分かかりとしてエラーが、いくつかのタイムアウト/遅延の後に来るようです。

sftp-serverへの接続が機能しています。ディレクトリからディレクトリリストを取得できます。

SFTPクライアントでファイルを置くことができるので、そのディレクトリへのアクセス権があります。

私はWindows環境でStrawberry Perlを使用しています。

use warnings; 
use strict; 
use Net::SSH2; 

my $dir1 = '.'; 
my $file = 'D:\\test\\test.txt'; 
my $ssh2 = Net::SSH2->new(); 
$ssh2->connect('testserver') or die "Unable to connect Host [email protected] \n"; 
$ssh2->auth_password('test','test') or die "Unable to login [email protected] \n"; 

if($ssh2->scp_put($file, $dir1)) { 
      print "File $file transferred to $dir1\n"; 
} else { 
      print "Couldn't transfer file $file to $dir1\n"; 
      print join ', ', $ssh2->error; 
      print "\n"; 
} 
+0

cwd( '.')とは対照的に、リモート(例: '/ home/user')のフルパスを使用すると機能しますか? – stevieb

+0

フルパスを使用しても違いはありません。ディレクトリリストはcwd(。)とフルパスで動作しますが、scp_putは機能しません。 – tommi

+0

おそらく、NET :: SFTP:Foreignを試してみる必要があります。私たちは現行のPerlセットアップではインストールされていません。だから私はlibssh2とscp_putでそれを管理しようとしていたのです。 – tommi

答えて

1

libssh2のSCPサポートは非​​常に基本的でバグがあります。

より良い代替手段は、Net::SSH::Anyであり、これは、SFCPの適切な純粋なperl実装を有し、またはNet::SFTP::Foreign SFTPのためのものである。どちらもNet::SSH2の上で動作します。

関連する問題