使用脚本 远程登录服务器并执行操作

业务场景:当我们每次需要交互式登录服务器,输入账号密码在服务器上执行机械化操作的时候,经常需要进行繁琐的脚本操作,如果可以写一个脚本自动化执行交互式命令就好了。

1.交互式命令执行工具 expect

linux系统自带expect执行工具 具有三大命令spawn expect send
编写好脚本之后,使用expect login.exp来执行该脚本(脚本后缀最好叫exp表示区别于.sh脚本,普通.sh脚本使用sh shell.sh来执行。)

#!/usr/bin/expect 
# 可以支持设置变量set,取变量用$user。
set user admin  
set host koubei.inc.alipay.net  
set password SomePassword  

spawn ssh $user@$host #spawn表示开启命令
expect "*password*" # *表示通配符 expect表示期望获取到的结果,支持通配符*
send "$password\r" #输入之后需要\r表示回车
expect eof 

2.登录服务器之后继续执行脚本(命令)

以上方法可以让我们成功登陆服务器,但是在服务器上我们却无法执行脚本,所以如果想既登陆服务器,又要在目标服务器上执行脚本,我们有2个方式。

spawn ssh admin@koubei.inc.alipay.net "
ls;
tail kb-webroot/server/Resources/Cookies/stable_Cookie.cookie"
expect "password"
send "SomePassword\r"
expect eof

在ssh admin@koubei.inc.alipay.net 后面加上双引号,双引号中写你需要在目标服务器上执行的脚本,支持换行,不用加\,两个命令之间需要使用分号‘;’隔开。
如果脚本内容过于复杂,你可以在目标服务器上写好一个可执行的脚本文件 example.sh ,然后讲双引号中的内容改成"./example.sh"来执行,有了这个功能基本就能实现所有的需求了。

3.在本地bash和expect穿插执行,参数传递。

若果你需要先在本地环境执行脚本拿到一些参数,然后传递给目标服务器,最后在目标服务器获得结果之后回到本地shell,这时候就需要穿插使用。

#!/bin/bash
read -s PWD
/usr/bin/expect <<EOD
spawn ssh admin@koubei.inc.alipay.net "
ls;
tail kb-webroot/server/Resources/Cookies/stable_Cookie.cookie"
expect "password"
send "$PWD\n" 
expect eof
EOD
ls
echo "call me crazy"

4.总结

shell的执行命令还有很多,熟练的shell能力能让我们的日常开发工作简单准确和更加轻松,明显提升工作体验,所以好好学习shell吧!也欢迎能看到这篇文章的朋友,多多交流经验技术!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,092评论 19 139
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 100,129评论 9 468
  • 其实刚开始画这种风格的时候,我还觉得是挺清新的,人物的相似程度控制在40-50%,没想到的是,3,40张下来,画风...
    完颜菜菜和水彩阅读 2,981评论 5 12
  • 因为换了工作,每天都要做2号线地铁,人真的是超级超级多,每天都会在心里抱怨上一阵,刚刚被挤的皱眉头,车里想起了报站...
    伊斯坦布尔的小金鱼阅读 3,865评论 0 1
  • 1、git config --global user.name "test" 设置名字 2、git...
    luobuwang阅读 6,752评论 0 1

友情链接更多精彩内容