3

带着另一个 perl + SSH 问题回到这里。

这是我的情况:

我需要使用 SSH 从服务器 A 连接到服务器 B。在这个 SSH 连接中,我需要在其他命令旁边建立一些 SFTP 连接。关于身份验证,我需要使用公钥身份验证。所有这些都在 Perl 脚本中,服务器 A 和 B 都是窗口。

你知道任何匹配这些约束的 perl 模块吗?

我试过了:

  1. Net::SSH::Any,但是API没有提到公钥认证
  2. Net::OpenSSH,API 说它不能在 Windows 上运行
  3. Net::SSH::Perl,API 提到了私钥的使用。当我尝试通过它时,它失败了(下面的代码)。如果我尝试使用 Putty,它可以工作。

额外的问题:我读到存储私钥(在我的情况下是在服务器 A 上)根本不安全(我明白为什么),有没有办法避免这种情况?

代码:

my $ssh = Net::SSH::Perl->new("server-ip", identity_files => [ 'path-to-private-key' ], option => ["BatchMode yes"]);
$ssh->login('login');
4

1 回答 1

6

我是 Net::OpenSSH 和 Net::SSH::Any 的作者。

Net::SSH::Any 确实支持公钥认证,但有一些隐藏的要求:

  • 密钥必须是 OpenSSH 格式(您可以使用 PuTTY 配套实用程序在格式之间转换密钥,google 为它)
  • 还需要一个带有公钥的文件,它必须放在"${path_to_private_key}.pub".

除此之外,在过去的几个月里,我一直致力于改进 Net::SSH::Any,并正在修复底层 Net::SSH2 模块和 libssh2 库的许多重要错误。如果你有胆量,不妨试试开发版(需要Net::SSH::Any、Net::SSH2和libssh2这三个包的git版本)。

我真的很感激得到任何关于它的反馈,特别是在 Windows 下运行时。

于 2013-11-05T13:54:55.893 回答