尽管在使用Parallel:ForkManager时安装了ssh密钥,服务器仍会提示输入密码

时间:2011-09-12 19:50:30

标签: perl ssh

我不知道怎么说最好但是这是我的问题: 我有两台机器,客户端A和服务器B. 我的客户端已通过身份验证,无需密码即可正常连接到B.当我从A到B执行ssh时,它会在没有密码的情况下登录。

然而, 当我使用Parallel :: Forkmanager模块使用多个并行连接时,它有时会要求输入密码。

这是我用来建立连接的代码: 码:     使用Parallel:ForkManager;

my $pm=new Parallel::ForkManager(15);
foreach my $processNumber (1 .. 15) {
$pm->start and next;
<subroutine to ssh to the server and perform some actions>;
$pm->finish;
}
$pm->wait_all_children;

每个进程都有大约5000次迭代创建一些表等。 间歇性地,它要求密码在通常不通过时验证客户端。

我的ssh密钥保存在服务器上。

可能是什么问题?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

当您在远程服务器的sshd上达到挂起身份验证的最大同时连接数时,我通常会看到此行为。默认值是10,因为你使用了15个分叉的孩子,你偶尔可以达到这个限制。

一些解决方案:

  1. 在服务器上修改/etc/ssh/sshd_config并增加MaxStartups
  2. 或者,您可以尝试在sleep $processNumber;循环顶部添加foreach,以确保连接错开。
  3. 或者只是将您的流程数量从15减少到10或更低。
  4. 不相关,但您可能希望在命令行上使用-O BatchMode=yes调用ssh,以防止它以交互方式提示您输入密码或密钥确认。它将失败并以非零退出,使您的脚本更容易正常检测和处理错误。