我们节日前机器健康状态巡检的时候,会需要用到批处理脚本。比如常见的要针对一堆线上物理机批量执行命令,查看进程健康状态,有没有设置crontab监控自动拉起脚本,日志有没有异常等等。
最笨的办法就是挨个ip登录执行这些操作。但是如果有平台几十台机器,那么批量做体力活也不是很现实。所以我们一般有以下的办法。
Polysh(以前称为Group Shell或gsh)是一个远程Shell多路复用器。它可以在一个shell程序中一次控制多个远程shell程序。和其他命令调度程序不一样,它是交互式的,界面类似以下这个样子。
但是一般来说ssh考虑到安全问题,会设计成必须手工输入密码,所以这里使用了另一个sshpass辅助输入密码。
sshpass -p [your password] ssh [user]@[your ip] [your shell command]
注意到因为很多机器是首次登录,并没有生成凭证放在本地的信任host列表中。
所以这里需要加上忽略选项 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ,要不自动登录会失败。
-t 选项是强制分配伪终端。
这样sshpass可以传递ssh一个密码,然后让ssh登录
假设我们现在有个文件[ip list file]上有一对ip列表,一行一个ip。那么可以使用while循环处理。
while read line; do sshpass -p [your password] ssh -t -no UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no [user]@"$line" [your command]; done < [ip list file]
注意到这里ssh有带一个-n选项,ssh因为它默认读取stdin。
-n让/ dev / null重定向到stdin(实际上,防止从标准输入读取)。这里必须加-n,要不while只会循环一次就退出了。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。