perl ssh然后在远程服务器上读取文件

时间:2014-10-09 21:38:54

标签: perl ssh

我需要

  1. 连接到远程服务器;然后
  2. 做一些事情,比如打开并阅读文件的内容。
  3. 对于第1步:

    my $server = "remoteservername.company.com";
    my $ssh = Net::SSH::Perl->new("$server", debug => 1, protocol => 2, StrictHostKeyChecking => "no") or die "Error connecting server $server";
    

    在终端

    上产生消息
      

    Connection established.

    所以我假设我通过代码连接到远程服务器ssh。

    对于第2步,如何使用本地服务器中的代码打开和读取远程服务器上的文件?这是迄今为止我能做的最好的事情:

    use strict;
    use warnings;
    use diagnostics;
    use warnings::register;
    use Net::SSH::Perl;
    use Net::SSH::Expect;
    use Math::BigInt lib => "Calc,GMP,Pari";
    
    my $server = "server09";
    my $ssh = Net::SSH::Perl->new("$server", debug => 1, protocol => 2, StrictHostKeyChecking => "no") or die "Error connecting server $server";
    
    #open(FILE, "/home/myid/f09.txt") || print("Unable to open test.o\n"); #works, on local, opens file[does not fail].
    
    #open(FILE, "server09://home/myid/f09.txt") || print("Unable to open test.o\n");  #---> error: "Unable to open test.o"
    
    my @remote_text = `this text is put into array.`;
    my $remote_text = join ('',@remote_text);
    open (FILE,'>/home/myid/f09.txt');
    print FILE "$remote_text";
    close (FILE);
    
    exit(0);
    

    但是,它不会向现有文件f09.txt添加任何内容;如果我删除文件,open也不会创建它。没有错误,但似乎没有联系远程文件。

    只是对ssh的简单解释,然后从远程文件中读取会有所帮助。我看到的其他例子并没有削减它。当然,可能是我,漫长的一天,必须离开它一段时间。非常感谢您的时间!

2 个答案:

答案 0 :(得分:0)

您实际上是在尝试通过SSH修改另一台计算机上存在的文件。 文件操作函数无法处理。

您是否可以从其他服务器下载文件,在本地更新并重新上传文件?

您可能还想尝试使用ssh命令:

my @remote_text = ('this text is put into array.');
my $remote_text = join ('',@remote_text);

my @args = ("ssh server09", "echo '$remote_text' > /home/myid/f09.txt");
system(@args) == 0 or die "system @args failed: $?"

答案 1 :(得分:0)

为了通过与另一台机器的SSH连接执行有趣的事情,您可能想尝试IPC::PerlSSH。从其中一个例子:

use IPC::PerlSSH;

my $ips = IPC::PerlSSH->new( Host => "over.there" );

$ips->use_library( "FS", qw( mkdir chmod writefile ) );

$ips->call( "mkdir", "/tmp/testing" );
$ips->call( "chmod", 0600, "/tmp/testing" );

$ips->call( "writefile", "/tmp/testing/secret", <<EOF );
Some secret contents of my file here
EOF