我正在尝试使用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
现在似乎不是一个可行的选择。
-
使用metacpan.org
调试:
为了调试目的,你可以在详细模式下运行ssh,传递-v选项:my $sftp = Net::SFTP::Foreign->new($host, more => '-v');
"模块描述"
启用调试(感谢所有评论者),我可以看到主机密钥验证失败。因此,在我将密钥添加到允许的密钥列表之后(通过对主机执行一次手动ssh),一切都工作正常。
对于root,密钥必须已经在列表中了,所以它与特权无关,只是与帐户的先前使用有关(我似乎以前从root到另一个主机ssh过)。