我不知道怎么说最好但是这是我的问题: 我有两台机器,客户端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密钥保存在服务器上。
可能是什么问题?任何帮助表示赞赏。
答案 0 :(得分:1)
当您在远程服务器的sshd上达到挂起身份验证的最大同时连接数时,我通常会看到此行为。默认值是10,因为你使用了15个分叉的孩子,你偶尔可以达到这个限制。
一些解决方案:
/etc/ssh/sshd_config
并增加MaxStartups
sleep $processNumber;
循环顶部添加foreach
,以确保连接错开。不相关,但您可能希望在命令行上使用-O BatchMode=yes
调用ssh,以防止它以交互方式提示您输入密码或密钥确认。它将失败并以非零退出,使您的脚本更容易正常检测和处理错误。