Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
perl文件处理_Perl_Ssh_Directory_File Handling - Fatal编程技术网

perl文件处理

perl文件处理,perl,ssh,directory,file-handling,Perl,Ssh,Directory,File Handling,我在主机上有一个文件列表,比如目录/src/。 该目录有更多的子目录。现在这个目录在挂载后被复制到远程机器上。现在,文件已预设在/dst目录下的远程计算机中 例如。如果我有/src/a/f1,/src/b/f2 我将在远程计算机上安装/dst/a/f1、/dst/b/f2 现在我只有关于主机目录、主机文件的信息。使用此信息,我如何在perl中使用ssh访问远程计算机上的文件。我将不得不cd到/dst并从那里读取文件。如何在一个ssh命令中读取这张cd 谢谢。谷歌搜索“manssh”会出现ssh手

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

例如。如果我有/src/a/f1,/src/b/f2 我将在远程计算机上安装/dst/a/f1、/dst/b/f2

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


谢谢。

谷歌搜索“manssh”会出现ssh手册页面。我遵循了第一个链接(),从中我们可以看到以下内容。指定了感兴趣的部分

ssh[-1246AACFGKMNQSTTVVXXY][-b 绑定\u地址][c密码\u规范][D 端口][e转义字符][F配置文件] [-i标识文件][-L [绑定地址:]端口:主机:主机端口][l 登录名][m mac\u spec][O ctl\u cmd] [-o选项][-p端口][-R [绑定地址:]端口:主机:主机端口][S ctl_path][user@]hostname[命令]

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

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

如果指定了命令,则在远程主机上执行命令,而不是 登录shell。

所以,试试sshuser@hostnamels-lR/src/,将“ls-lR”替换为您实际需要的任何命令

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

如果您想在不授权给
/usr/bin/ssh的情况下完成这一切,请签出并

您需要
scp\u get(远程[本地])

它看起来像这样

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 );
  }
使用File::Spec();
使用Net::SSH2();
我的($vol,$dir,$file)=文件::规范::拆分路径($path);
my@dirs=File::Spec::splitdir($dir);
##更改根目录
$dirs[0]=“dst”#新根目录
我的$new\u remote\u path=File::Spec::catfile(@dirs,$File);
##几乎完全来自Net::SSH2概要
我的$ssh2=Net::ssh2->new();
$ssh2->connect('example.com')或die$!;
如果($ssh2->auth_键盘('fizban')){
my$sftp=$ssh2->sftp();
my$fh=$sftp->open('/etc/passwd')或die;
打印$\uuuwhile;
##或$ssh2->scp\u get($new\u remote\u path);
}