我正在尝试在 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/