【问题标题】:PERL SFTP using System, Cannot install SFTP modulePERL SFTP 使用系统,无法安装 SFTP 模块
【发布时间】:2012-11-06 18:41:39
【问题描述】:

我对 perl 和 stackoverflow 有点陌生。如果我可以使用更熟悉的语言,我会,不幸的是,由于某些情况我不能。在此先感谢您的帮助。

未安装模块:Net::SFTP、WWW::CURL、Net::SSH2、Net::SFTP::Foriegn 安装的模块:Net::FTP

我无法安装模块。

无法使用 Net::FTP 尝试了默认端口和端口 22,带有用户名和密码。尝试连接时,我从另一个盒子的日志中得到的只是“没有收到来自 xx.xx.xx.xx 的标识字符串”也无法在命令行中使用 FTP,超时。

$ftp = Net::FTP->new($box,Port=>22, Debug => 0)
or die print "Error: Cannot connect";
$ftp->login($userBox,$passBox)
or die print "Error: Cannot login";
$ftp->cwd()
or die print "Error: Cannot change to Root";
$ftp->cwd($dir)
or die print "Error: Cannot change to selected directory";
if($copyfile ne "" && $dir ne "")
{
$ftp->put($copyfile, $copyfile);
}
$ftp->quit();

我可以通过 linux 命令行手动使用 SFTP,而不是 FTP,所以我一直在尝试使用系统命令将 SFTP 导入另一个框。另一个盒子的日志只是说“连接由 xx.xx.xx.xx 关闭”

system('sftp '.$userBox.'@'.$box.' ENDOFINPUT'
.$passBox.'ENDOFINPUT
cd ../../../
put '.$filename.' '.$dir.'
exit
ENDOFINPUT');

如果有人知道如何帮助我解决我的问题,那就太好了:)

【问题讨论】:

  • SFTP 和 FTP 是两个完全不同的协议。无法使用 Net::SFTP 访问 SFTP 服务器。

标签: perl sftp


【解决方案1】:

让我们从另一个方向来解决这个问题......当你说你“无法安装模块”时,仅仅是因为你没有 root 权限吗?如果是这种情况,您可以改为install them locally under a user account

如果机器没有互联网连接,甚至无法在本地安装它们,您可以使用相同的技术将它们安装在不同的机器上,然后 gzip 您安装它们的整个本地目录并将它们复制到目标机器,并添加一个“use lib”语句以从您的脚本中获取它们。

【讨论】:

  • 嗯,我不知道我可以做这样的事情。我必须请教一位前辈,以确保我会被允许做这样的事情。谢谢。
【解决方案2】:

您确定 $passBox 等效项在 shell 上有效吗?

您应该能够使用密钥对设置无密码连接,这将使该问题很快消失。

【讨论】:

  • 我已经替换了将我的凭据直接放入代码中的变量,以查看它是否是变量问题。并且相同的凭据用于 shell 中的 SFTP(假设 linux 命令行)我对 linux box/perl 相当陌生。所以行话不是最好的。
  • 让我们具体一点:你在shell中所做的与perl中的here文档完全相同,它有效吗?坦率地说,如果确实如此,我会感到相当惊讶。我没有问凭据是否正确,而是相同的语法是否有效。
  • 查看代码时,我不小心删除了一点@.@ 让我快速修复它,但我放入了 linux 命令行。但是唯一与命令行不同的是 Endofline 的东西。 sftp USER@BOX USER@BOX pass: input pass 已连接
  • 所以你是交互式输入密码的?
  • 命令行 是的,很抱歉无法格式化,至少不知道如何。因此,在我输入 SFTP USER@BOX 后,一旦我输入密码,我就会被提示输入密码,我被允许访问。
猜你喜欢
  • 1970-01-01
  • 2019-09-23
  • 1970-01-01
  • 2018-06-24
  • 2010-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多