在远程linux机器上创建一个文件

时间:2014-07-03 04:19:33

标签: perl

我想从我的本地Windows机器在远程Linux机器上创建一个文件。 将创建的文件应为10行 像

E-762334|UC5L0001|2.6.7.1.0.12.0.0.0.372|3.0.0|20130917193000|12
E-762334|UC5L0001|2.6.7.1.0.12.0.0.0.372|3.0.0|20130917194000|13
E-762334|UC5L0001|2.6.7.1.0.12.0.0.0.372|3.0.0|20130917195000|14
E-762334|UC5L0001|2.6.7.1.0.12.0.0.0.372|3.0.0|20130917196001|15
E-762334|UC5L0001|2.6.7.1.0.12.0.0.0.372|3.0.0|20130917193002|6
E-762334|UC5L0001|2.6.7.1.0.12.0.0.0.372|3.0.0|20130917193500|13
E-762334|UC5L0001|2.6.7.1.0.12.0.0.0.372|3.0.0|20130917193700|1
E-762334|UC5L0001|2.6.7.1.0.12.0.0.0.372|3.0.0|20130917193200|13

我的代码:

use Net::SSH2::Simple;
use Net::SSH2;

my $ssh2 = Net::SSH2::Simple->new();
$ssh2->connect('host') or die "Unable to connect Host $@ \n";

$ssh2->auth_password('user','password') or die "Unable to login $@ \n";
my $test = <<'END';
E-762334|UC5L0001|2.6.7.1.0.12.0.0.0.372|3.0.0|20130917193000|12
E-762334|UC5L0001|2.6.7.1.0.12.0.0.0.372|3.0.0|20130917194000|13
E-762334|UC5L0001|2.6.7.1.0.12.0.0.0.372|3.0.0|20130917195000|14
END

my $cmd="echo $test > /data/spanda/pppp1";
($stdout,$stderr, $exitcode) = $ssh2->cmd($cmd ,'bufsize' => 4_096  ) or die "cannot execute command: ";

if ($exitcode == 0) {  
    print $stdout if $stdout; 
    print $stderr if $stderr;  
} else {           
    print $stderr if $stderr;  
    die "command  failed with exit code $exitcode";     
} 

我收到错误

13: Command not found.
E-762334: Command not found.
UC5L0001: Command not found.
2.6.7.1.0.12.0.0.0.372: Command not found.
3.0.0: Command not found.

1 个答案:

答案 0 :(得分:1)

您的命令不起作用的原因与echo foo|bar > /tmp/x不起作用(应引用带管道的字符串)。

另一方面,有更强大的方法; Net::SSH2::Simple继承自Net::SSH2,后者又可以返回Net::SSH2::SFTP个对象,

  use Fcntl;

  # my $sftp = $ssh2->sftp();
  my $fh = $ssh2->sftp->open('/data/spanda/pppp1', O_WRONLY|O_CREAT) or die;

  print $fh $test;