前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自动化登录并执行命令返回的脚本设计

自动化登录并执行命令返回的脚本设计

原创
作者头像
mariolu
发布2021-05-01 10:35:47
1.7K0
发布2021-05-01 10:35:47
举报
文章被收录于专栏:CDN及云技术分享

我们节日前机器健康状态巡检的时候,会需要用到批处理脚本。比如常见的要针对一堆线上物理机批量执行命令,查看进程健康状态,有没有设置crontab监控自动拉起脚本,日志有没有异常等等。

最笨的办法就是挨个ip登录执行这些操作。但是如果有平台几十台机器,那么批量做体力活也不是很现实。所以我们一般有以下的办法。

一、使用polysh:

Polysh(以前称为Group Shell或gsh)是一个远程Shell多路复用器。它可以在一个shell程序中一次控制多个远程shell程序。和其他命令调度程序不一样,它是交互式的,界面类似以下这个样子。

二、使用ssh执行命令,然后使用while循环批量执行并回收结果

但是一般来说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登录

2.1 批处理文件

假设我们现在有个文件[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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、使用polysh:
  • 二、使用ssh执行命令,然后使用while循环批量执行并回收结果
    • 2.1 批处理文件
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档