perl文件处理
我在主机上有一个文件列表,比如目录/src/。 该目录有更多的子目录。现在这个目录在挂载后被复制到远程机器上。现在,文件已预设在/dst目录下的远程计算机中 例如。如果我有/src/a/f1,/src/b/f2 我将在远程计算机上安装/dst/a/f1、/dst/b/f2 现在我只有关于主机目录、主机文件的信息。使用此信息,我如何在perl中使用ssh访问远程计算机上的文件。我将不得不cd到/dst并从那里读取文件。如何在一个ssh命令中读取这张cdperl文件处理,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手
谢谢。谷歌搜索“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);
}