【问题标题】:perl - file handlingperl - 文件处理
【发布时间】:2011-03-09 19:43:22
【问题描述】:

我在 /src/ 目录中有主机上的文件列表。 该目录有更多的子目录。现在这个目录在挂载后被复制到远程机器上。现在文件已预设在远程机器的 /dst 目录中。

示例。如果我有 /src/a/f1, /src/b/f2 我将在远程机器上 /dst/a/f1 ,/dst/b/f2

现在我只有主机目录、主机文件的信息。使用此信息,我如何在 perl 中使用 ssh 访问远程计算机上的文件。我将不得不 cd 到 /dst 并从那里读取文件。如何执行此 cd 并读取一个 ssh 命令。

谢谢。

【问题讨论】:

    标签: perl ssh directory file-handling


    【解决方案1】:

    如果您想在不委托给/usr/bin/ssh 的情况下完成所有操作,请查看Net::SSH2File::Spec

    你需要scp_get ( remote [, local ] )

    它看起来像这样。

    use File::Spec ();
    use Net::SSH2 ();
    my ( $vol, $dir, $file ) = File::Spec::splitpath( $path );
    my @dirs = File::Spec::splitdir( $dir );
    
    ## Change the root dir
    $dirs[0] = 'dst'; # new_root_dir
    
    my $new_remote_path = File::Spec::catfile( @dirs, $file );
    
      ## Almost right from Net::SSH2 SYNOPSIS
      my $ssh2 = Net::SSH2->new();
      $ssh2->connect('example.com') or die $!;
      if ($ssh2->auth_keyboard('fizban')) {
    
          my $sftp = $ssh2->sftp();
    
          my $fh = $sftp->open('/etc/passwd') or die;
          print $_ while <$fh>;
    
          ## or $ssh2->scp_get( $new_remote_path );
      }
    

    【讨论】:

      【解决方案2】:

      谷歌搜索“man ssh”会出现 SSH 手册页。我点击了第一个链接(http://unixhelp.ed.ac.uk/CGI/man-cgi?ssh+1),从中我们可以看到以下内容。指定了有趣的部分。

      ssh [-1246AaCfgkMNnqsTtVvXxY] [-b bind_address] [-c cipher_spec] [-D 端口] [-e escape_char] [-F 配置文件] [-i 身份文件] [-L [绑定地址:]端口:主机:主机端口] [-l 登录名] [-m mac_spec] [-O ctl_cmd] [-o 选项] [-p 端口] [-R [绑定地址:]端口:主机:主机端口] [-S ctl_path] [user@]主机名 [命令]

      ...

      ssh (SSH 客户端) 是一个程序 登录到远程机器并为 在遥控器上执行命令 机器。它旨在取代 rlogin 和 rsh,并提供安全的 两个之间的加密通信 在不安全的情况下不受信任的主机 网络。 X11连接和任意 TCP/IP端口也可以转发 通过安全通道。

      ssh 连接并登录 指定的主机名(带有可选用户 姓名)。用户必须证明他/她 远程机器的身份使用 几种方法之一,取决于 使用的协议版本。

      如果指定了 command,则在远程主机上执行 command 而不是 一个登录外壳。

      所以,试试ssh user@hostname ls -lR /src/,用你真正想要的任何命令替换“ls -lR”。

      编辑 哦,看看身份文件的手册页——如果你设置了密钥,你可以使用它来避免在命令行上向 SSH 提供密码。并确保您的身份文件的整个路径具有强大的权限,因此其他人无法读取/替换/编辑它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-15
        • 2013-07-10
        • 2014-05-16
        • 2013-02-02
        • 2014-03-17
        • 1970-01-01
        • 2011-08-23
        • 1970-01-01
        相关资源
        最近更新 更多