前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >shell实现ssh登录并执行命令

shell实现ssh登录并执行命令

作者头像
Li_XiaoJin
发布2022-06-10 19:32:18
1.6K0
发布2022-06-10 19:32:18
举报
文章被收录于专栏:Lixj's BlogLixj's Blog

最近搞灰度发布,机器太多了,四个国家,每个国家两台机器,启停应用很费时间,所有打算写个shell脚本来提高效率(偷懒~)

使用expect可以不用输入密码,避免重复劳动。 那什么是expect? 查了一下,expect是一个免费的编程工具,用来实现自动的交互式任务,而无需人为干预。说白了,expect就是一套用来实现自动交互功能的软件。

在实际工作中,我们运行命令、脚本或程序时,这些命令、脚本或程序都需要从终端输入某些继续运行的指令,而这些输入都需要人为的手工进行。而利用expect,则可以根据程序的提示,模拟标准输入提供给程序,从而实现自动化交互执行。这就是expect!!!真的很好用。

先安装expect

代码语言:javascript
复制
yum install -y expect

touch test.sh chmod 755 test.sh

使用expect时发现执行脚本的时候不能使用sh test.sh 应该用 ./test.sh,因为expect不是bash

ssh 正常是使用 ssh uk@mvno-b-app-07 "sh /data/uk/script/start-job.sh" 然后还需要输密码等操作

expect + ssh

代码语言:javascript
复制
#!/usr/bin/expect

set timeout 3
spawn ssh uk@mvno-b-app-07 "sh /data/uk/script/start-job.sh"
expect {
    "*yes/no" {send "yes\r"; exp_continue}
    "*password:" {send "password\r"}
}
interact

expect 主要是用 send、expect、spawn、interact 四个命令。 send 命令接收一个字符串参数,并将该参数发送到进程。

expect 命令和send命令相反,expect通常用来等待一个进程的反馈,我们根据进程的反馈,再发送对应的交互命令。

spawn 命令用来启动新的进程,spawn后的send和expect命令都是和使用spawn打开的进程进行交互。

interact 命令用的其实不是很多,一般情况下使用spawn、send和expect命令就可以很好的完成我们的任务;但在一些特殊场合下还是需要使用interact命令的,interact命令主要用于退出自动化,进入人工交互。比如我们使用spawn、send和expect命令完成了ftp登陆主机,执行下载文件任务,但是我们希望在文件下载结束以后,仍然可以停留在ftp命令行状态,以便手动的执行后续命令,此时使用interact命令就可以很好的完成这个任务。

到此就完成了,不用一台台机器登录上去执行命令了,一行命令搞定。

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可 Links: https://lixj.fun/archives/shell实现ssh登录并执行命令

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档