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

时间:2014-06-23 10:18:17

标签: linux perl sftp

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

2 个答案:

答案 0 :(得分:1)

  1. 使用metacpan.org

  2. 调试:

  3. 出于调试目的,您可以在详细模式下运行ssh,并将-v选项传递给它: my $sftp = Net::SFTP::Foreign->new($host, more => '-v');

    "Module description"

答案 1 :(得分:0)

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

对于root,密钥必须已经在列表中,因此它与priviledge无关,只是在事先使用帐户之前(我似乎在从root到其他主机之前有ssh' ed)。