如何在 perl 脚本中的现有 ssh 会话上使用 expect,其中 bash 脚本已经通过管道传输到它们

问题描述

我有一个 perl 脚本,它从数据库和 ssh 中提取主机名,并将 bash 脚本通过管道传输到这些 ssh 会话以进行监控。

这些主机绝大多数都拥有根密钥,除了监控之外,我还试图证明进一步使用根密钥的合理性,以更好地促进这种监控方法

这是一个例子(上下文是 perl 脚本中的一个 while 循环):

system("cat /usr/local/bin/filesystem_scan.sh | ssh -o UserKNownHostsFile=/dev/null -o StrictHostKeyChecking=no root\@$name '/bin/bash; uname -a &> /dev/null' ");

还有另一个 bash 脚本运行 perl 脚本,并从通过管道传输的脚本中获取结果代码并将它们编辑成报告。

#!/bin/bash

perl /usr/local/bin/readonly-fs-scan.pl | grep -v " 0$\| 127$" | column -t > report.txt

问题是脚本需要很长时间才能运行(超过 500 台主机),因为大约有 50 台主机没有根密钥。作为在这些服务器上获得密钥批准的权宜之计,我试图找到一种方法来实现此过程中的期望,以便在请求密码时发送 return(否则脚本会停止超过一个这 50 个主机中的每一个都需要等待 1 分钟的输入,这会导致运行一个大约需要 5 分钟的脚本需要大约一个小时)。我已经能够在一个简单的 bash 脚本中执行此操作,该脚本将 ssh 连接到一个服务器,如下所示:

#!/bin/bash
expect -c "set timeout 5
spawn ssh -o UserKNownHostsFile=/dev/null -o StrictHostKeyChecking=no root@$name
expect \"*password:\"
send \"\r\""

但是我很难理解如何将其插入到 perl 脚本中。

这是一项工作任务,因此我可以进行的大范围更改受到限制 -(更改代码语言、安装额外的实用程序等)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)