我正在尝试使用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
似乎不是一个可行的选择。
答案 0 :(得分:1)
使用metacpan.org
调试:
出于调试目的,您可以在详细模式下运行ssh,并将-v选项传递给它:
my $sftp = Net::SFTP::Foreign->new($host, more => '-v');
答案 1 :(得分:0)
启用调试(感谢所有评论者),我可以看到主机密钥验证失败。因此,在将密钥添加到允许密钥列表后(通过对主机执行手动ssh),一切正常。
对于root,密钥必须已经在列表中,因此它与priviledge无关,只是在事先使用帐户之前(我似乎在从root到其他主机之前有ssh' ed)。