shell实现ssh登录并执行命令
最近搞灰度发布,机器太多了,四个国家,每个国家两台机器,启停应用很费时间,所有打算写个shell脚本来提高效率(偷懒~)
使用expect可以不用输入密码,避免重复劳动。
那什么是expect?
查了一下,expect是一个免费的编程工具,用来实现自动的交互式任务,而无需人为干预。说白了,expect就是一套用来实现自动交互功能的软件。
在实际工作中,我们运行命令、脚本或程序时,这些命令、脚本或程序都需要从终端输入某些继续运行的指令,而这些输入都需要人为的手工进行。而利用expect,则可以根据程序的提示,模拟标准输入提供给程序,从而实现自动化交互执行。这就是expect!!!真的很好用。
先安装expect
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
#!/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命令就可以很好的完成这个任务。
到此就完成了,不用一台台机器登录上去执行命令了,一行命令搞定。
- Python实现ssh登录执行shell命令并将结果写入mysql数据库
- java实现ssh登录执行shell命令及一些问题。
- 用python SSH模块登录,并在远程机执行shell命令
- expect实现自动scp和ssh登录后执行命令,并向bash提供返回值
- ssh批量登录并执行命令(python实现)
- Python免秘钥ssh远程登录执行命令and本地执行shell命令
- Windows使用SSH Secure Shell实现免密码登录Linux的方法以及使用scp2命令免密码下载文件
- shell小白 想玩自动化部署,无密码ssh 登录远程服务器,执行scp命令传送war包 并重启tomcat。
- python使用paramiko模块实现ssh登录执行命令
- 用python SSH模块登录,并在远程机执行shell命令
- linux使用Python上秘钥远程登录ssh执行shell命令
- python SSH模块登录,远程机执行shell命令实例解析
- linux shell ssh实现自动登录,并且执行一些操作并返回到当前主机
- 基于Java实现ssh命令登录主机执行shell命令过程解析
- ssh批量登录并执行命令(python实现)
- ssh批量登录并执行命令的python实现代码
- 工具类一:java代码实现ssh远程登陆服务器,执行shell命令和ftp传输
- shell脚本怎么实现A主机SSH到B主机,在从B主机SSH到C主机,然后在C主机执行ps -ef命令返回C主机的进程数,求教大佬给个小例子
- 用python SSH模块登录,并在远程机执行shell命令
- shell小白 想玩自动化部署,无密码ssh 登录远程服务器,执行scp命令传送war包 并重启tomcat。