使用Net::SFTP::Foreign作为非根用户没有连接



我正在尝试使用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现在似乎不是一个可行的选择。

  1. 使用metacpan.org

  2. 调试:

为了调试目的,你可以在详细模式下运行ssh,传递-v选项:my $sftp = Net::SFTP::Foreign->new($host, more => '-v');

"模块描述"

启用调试(感谢所有评论者),我可以看到主机密钥验证失败。因此,在我将密钥添加到允许的密钥列表之后(通过对主机执行一次手动ssh),一切都工作正常。

对于root,密钥必须已经在列表中了,所以它与特权无关,只是与帐户的先前使用有关(我似乎以前从root到另一个主机ssh过)。

最新更新