我写在bash吐出的OpenSSL的版本在我的服务器(checking if I'm protected against this most recent openssl vulnerability)一个少一个衬垫,但如果SSH无法连接和时间它阻止了脚本的其余部分执行。我知道有足够的bash来解决问题,但我不太清楚在这里需要做些什么来强制它继续,也许会陷入SIGTERM并从我离开的地方继续?我敢肯定有一个更简单的方法..xargs的SH -c“SSH ...”停止执行任何时连接超时
这里的命令:
cat servers.txt | \
xargs -I {} sh -c "echo {} && ssh -o ConnectTimeout=3 [email protected]{} openssl version"
哪里servers.txt
只是IP地址的大名单,每行一个
@CharlesDuffy不知道关于xargs,谢谢! – bruchowski
你应该**不要**直接将'{}'扩展为'sh -c'或类似的脚本。这是不安全的。您应该将'{}'作为参数传递给shell,并在shell脚本中使用适当的位置参数。 'xargs'的手册页表明,如果内部进程以退出代码“255”退出,它应该只停止整个执行链。我不希望'ssh'这样做,但也许它在这里。简单地添加'||退出1'到脚本“修复”问题? –
(在另一点上,'sh'是POSIX sh,而不是bash - 即使/ bin/sh是/ bin/bash的链接,它在运行时会关闭一些功能;只是'sh'或当不*显式*使用bash时'shell'是合适的标签)。 –