我一直试图使用Net :: SFTP和RSA密钥进行sftp。我可以在没有密码的情况下手动sftp到我的sftp服务器但是在使用它时它不起作用。我已经没想完了。
my $ftp = Net::SFTP->new($HOST, user => $USER, ssh_args => { identity_files => [ "/Users/user/.ssh/id_rsa" ] }, debug => 3 );
它给了我以下错误:
尝试使用密钥文件进行pubkey身份验证' /Users/tom/.ssh/id_rsa'
致命:rsa导入失败:输入数据包无效。在 /Library/Perl/5.18//Crypt/PK/RSA.pm第123行。
非常感谢任何帮助, 谢谢!
答案 0 :(得分:1)
我自己遇到了这个问题。
问题是,正如您在评论中指出的那样,我(和您)的私钥已加密。加密的私钥要求您输入密码才能使用,而perl模块似乎不支持此密码。
您声称使用此密钥时不需要密码,但这也许是因为sftp使用的是ssh代理?即在哪里输入一次密码,然后密钥保留在内存中以供所有ssh系列工具使用?似乎perl模块也不支持该代理,但是@salva建议使用Net::SFTP::Foreign应该可以解决该问题。
值得注意的是,我在运行以前可以在我的工作站上正常工作的代码,但在新安装的perl上却遇到此异常。我认为所发生的是Net :: SSH :: Perl模块增加了对读取私钥的支持,或者将无法读取私钥的失败更改为致命错误,而不仅仅是忽略了密钥。我的代码无论如何都没有使用密钥,但是现在无法使用该加密密钥。此问题已通过以下方式解决:
my $sftp= Net::SFTP->new(
...
ssh_args => [ identity_files => [] ]
);
当然,您可以添加要使用的特定(未加密)身份文件列表,而不是默认用户的RSA ID。
如果代码不容易编辑,您还可以通过将环境变量$HOME
设置为其中没有键的方式来避免该问题。