【问题标题】:No connection as non root using Net::SFTP::Foreign没有使用 Net::SFTP::Foreign 以非 root 身份进行连接
【发布时间】: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,所以下次我会尽量记住这一点。

标签: linux perl sftp


【解决方案1】:
  1. 使用 metacpan.org

  2. 调试:

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

"Module description"

【讨论】:

  • 您好,欢迎来到 SO。此响应更像是“评论”而不是“答案”。如果 OP 确实回复了调试尝试的输出,您可以编辑您的回复以提供完整的答案。
  • 嗨。我想添加评论,但得到一个缺乏声誉的错误:(。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多