【发布时间】:2014-06-24 19:30:48
【问题描述】:
我正在尝试使用 perl 脚本在 cron 作业中将文件从一台机器传输到另一台机器。但是出于安全原因,cron 作业必须以非特权用户身份运行。现在,如果我尝试使用这个无特权的用户建立连接,Net::SFTP::Foreign 总是拒绝连接。这是我遇到问题的脚本部分:
my $host = "hostname";
my %args = (
user => "username",
password => "password",
port => '12345'
);
my $sftp_connection = Net::SFTP::Foreign->new($host, %args);
if( $sftp_connection->error ) {
log_message( "E", "Error " . $sftp_connection->status() . " connecting to " . $host );
die;
}
log_message( "A", "Connected" );
我不能给出完整的例子,因为这需要用户名和密码。
如果我以 root 身份执行此脚本,一切正常,但是如果我尝试使用其他用户,连接总是失败。
有没有办法获得更多的诊断信息?我认为有一种方法可以从实际的 sftp 进程中获得更多输出,但我现在无法查找它,因为 cpan 目前不能从这里工作。
我之前也尝试过使用Net::SFTP 而不是Net::SFTP,但是后面部分的错误处理不能正常工作,所以现在切换到Net::SFTP 似乎不是一个可行的选择。
【问题讨论】:
-
我无法重现您的问题,此示例中是否缺少任何重要内容?您是否尝试从非特权帐户使用 ssh/sftp 命令建立连接?
-
启用调试:
$Net::SFTP::Foreign::debug = -1; -
@Salva:感谢您提供调试提示,由于无法访问 CPAN,我无法查找。
-
您无需访问 CPAN Web 前端即可阅读已安装模块的文档。只需从终端使用
perldoc。在大多数 Linux 发行版上,模块文档也作为手册页安装:man Net::SFTP::Foreign。 -
@Salva:感谢您的提示。我几乎从不使用 Perl,所以下次我会尽量记住这一点。