问题描述
我有一个 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 (将#修改为@)