perl - perl 中的并行 SSH

标签 perl

我正在尝试在 perl 中创建一个脚本,它可以通过 ssh 连接到多个主机(500+),执行所需的命令,并在屏幕上显示输出。我已经使用 Net::OpenSSH 模块完成了此操作,因为未配置 ssh key 并且我不允许配置它们。所以,我必须使用一个可以在执行 ssh 时提供密码的东西。

由于连接较多,做这件事需要相当长的时间。我搜索“perl 中的并行 ssh”并发现有一个用于打开并行 ssh 的模块 (Net::OpenSSH:Parallel),但我在某些论坛的某个地方读到我无法使用此模块捕获输出,就像我可以使用 Net 捕获一样::OpenSSH ($ssh->caputre(ls)).

那么,如何更方便的实现并行ssh呢?另外,我欢迎任何其他可以用来节省时间的建议。在线程中使用 Net:OpenSSH 会节省我的时间还是会像并行一样工作?

最佳答案

您可以 fork 您的程序并使用类似 Parallel::ForkManager 的东西来管理 fork 。然后使用 Net::OpenSSH 执行 SSH 工作 + 捕获并将结果显示到屏幕上。你需要小心你的 IO,因为所有那些试图同时写入 STDOUT/STDERR 的进程都会得到乱码结果。你需要做一些类似这个问题的答案(父进程和子进程之间的管道):fork() and STDOUT/STDERR to the console from child processes

并行编程比串行编程更难,所以请准备好享受一些乐趣:)

关于perl - perl 中的并行 SSH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11573216/

相关文章:

perl - Perl 中的嵌套 foreach 循环仅循环一次

perl - 如何在 Perl 中打开一组文件?

Perl错误: No such file or directory

multithreading - 为什么 URI 对象不能定位方法 "scheme"?

perl - Starman 和 MovableType 5.2

regex - s/\G/0/g 是什么意思?

perl - 在编写 Perl 模块时,我是否必须在所有方法中专门检查对象实例?

perl - 动态变量值?

PERL ssh 脚本 tty 问题

perl - 如何从 Perl 中的用户输入解析数学函数?