linux shell用expect自动输入密码

最近有东西需要部署到很多服务器上去,一个服务器一个服务器的部署实在是在麻烦了,就想着用脚本自动部署来着,想的是在一台服务器上放上部署包,scp拷贝过去,然后ssh执行那边的部署脚本,但是苦于密码不能自动输入,后面找到了一个方法用expect

按行读取文件

首先得把所有得服务器信息从配置文件中一行一行的读取出来

# list.txt 是存储服务器信息的文件
# deploy.sh 是部署的脚本 cat list.txt | while read LINE
do
./deploy.sh $LINE
done

expect

首先,你得下载这个命令
sudo apt-get install expect

详细的语法,可以看这位大佬的文章

有两种用法,一种是

#!/bin/bash

expect -c "
spawn scp ./test.txt root@192.168.100.22:/root
expect {
\"yes/no\" {send \"yes\r\";exp_continue;}
\"*password\" {set timeout 500;send \"123456\r\";}
}
expect eof"

第二种用法(其实实质还是一样的):

#!/bin/expect

spawn scp ./test.txt root@192.168.100.22:/root
expect {
"yes/no" {send "yes\r";exp_continue;}
"*password" {set timeout 500;send "123456\r";}
}

解释一下:
spawn: 是开一个新的进程去执行后面的命令
expect: 是获取spawn命令执行后的信息,看看是否和其事先指定的相匹配,如果匹配就会执行后面的内容。如果单独写expect不写spawn,就不会触发。
send: 发送指定的字符给系统。
exp_continue: 是让expect继续往下匹配。
eof: 关键字用于匹配结束符。

其他

我有一个脚本initial.sh是这样写的:

#!/bin/bash

read -p "Please Input: " num1
# ...

我也想要自动部署的时候,能够自动输入最开始我是这样的

yes "1" | tail -n 1 | ./initial.sh

yes,可以一直输出yes命令后的字符串,直到手动停止掉这个yes进程,如果yes后面不跟,就会默认输出y

,最后发现一个超级简单的办法

echo "1" | ./initial.sh

这样就可以达到目的。

linux shell用expect实现在scp时自动输入密码的更多相关文章

  1. 在 Linux 命令行脚本中执行 sudo 时自动输入密码

    使用 expect 实现自动登录的脚本的原理. 脚本代码如下: ############################################## #!/usr/bin/expect set ...

  2. linux脚本实现scp命令自动输入密码和yes/no等确认信息

    实现方式: 通过expect工具实现 #!/bin/bash yum -y install expect expect -c " spawn scp -r root@192.168.10.1 ...

  3. Linux中使用expect脚本实现远程机器自动登录_linux shell

    首先创建一个expect脚本ssh_expect,文件内容如下: #!/usr/bin/expect -f set hostname [lindex $argv 0] set user [lindex ...

  4. 在linux下python爬虫进程发生异常时自动重启直至正常结束的方法

    之前在做爬虫的时候遇到一种情况,当网络情况不太好的时候,爬虫爬到的链接在urlopen时会因为无法正常连接而报URLError或者timeout的错误导致陈序报错而终止:但是这些错误在重新运行陈序后能 ...

  5. 用expect实现SCP/SSH自动输入密码登录

    在命令行ssh远程登录服务器和scp远程传输文件都需要交互式输入密码,无法像mysql登录数据库 mysql -uroot -p123456一样直接完成. 其实可以用脚本依赖expect来达到这一目的 ...

  6. sshpass ssh登录时自动输入密码

    安装 直接安装 sudo apt-get install sshpass 源代码安装 wget http://sourceforge.net/projects/sshpass/files/sshpas ...

  7. 几种方法来实现scp拷贝时无需输入密码

    欢迎转载!转载时请注明出处:http://blog.csdn.net/nfer_zhuang/article/details/42646849 前言 我在工作中经常要将一些文件传输到另外一个服务器上, ...

  8. linux 执行远程linux上的shell脚本或者命令以及scp 上传文件到ftp--免密码登陆

    场景:在linux A 上执行Linux B上的shell脚本和命令 步骤1.设置ssh免登陆 1.SSH无密码登录 # 本地服务器执行(A机器):生成密钥对 ssh-keygen -t dsa -P ...

  9. Linux命令(27):shell 结合expect,多服务器批量分发数据

    shell 结合expect 写的批量scp脚本工具 except安装:http://www.cnblogs.com/lovychen/p/6525623.html expect用于自动化地执行lin ...

  10. Linux shell批量执行scp脚本工具

    转载: linux shell + expect:批量scp脚本工具             2011-09-13 15:51:06 分类: Python/Ruby 最近在准备一个部署的任务,其中有一 ...

随机推荐

  1. 【sprinb-boot】@ComponentScan 跳过扫描 excludeFilters

    @ComponentScan(excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {Contr ...

  2. Qt Creator 5.0 发布

    我们很高兴地宣布 Qt Creator 5.0 的发布! 正如4.15 发布博文中所宣布的,我们将切换到语义版本控制方案,因此这是 Qt Creator 很长一段时间以来的第一次主要版本更新!不过不要 ...

  3. 查询 maven 依赖 的最新版本号

    如何通过maven官网查询相关依赖的具体代码和版本? 通过官网:http://mvnrepository.com/,或者:https://search.maven.org/ 在搜索栏中输入想要引入的依 ...

  4. Linux USB 文件读写性能测试

    USB 端口读写性能测试:========================================================读测试:sync && echo 3 > ...

  5. nginx升级与版本回退

    ginx官网下载安装包http://nginx.org/en/download.html 查看nginx文件或目录find / -name nginx 2>/dev/null 查看已安装的 Ng ...

  6. Java验证邮箱是否有用的实现与解析

    在现代互联网应用中,邮箱验证是一个常见的需求.通过邮箱验证,开发者可以确保用户提供的邮箱地址是有效的,从而在后续的操作中,如密码重置.通知发送等,依赖这些有效的邮箱地址.本文将详细介绍如何使用Java ...

  7. CDS标准视图:维护策略数据 I_MaintenanceStrategyData

    视图名称:维护策略数据 I_MaintenanceStrategyData 视图类型:基础视图 视图代码: 点击查看代码 @AbapCatalog.sqlViewName: 'IMAINTSTRATD ...

  8. linux:网络

    网络概念 网络发展 1.1969年互联网元年 2.局域网(LAN,Local Area Network).城域网(MAN).广域网(WAN,Wide Area Network) ip地址 网络基础命令 ...

  9. 02如何直接使用uni-app中提供的模板之公告滚动

    用hBuibler将提供的模板下载下载,通过url上的路径找到你需要的模板对应的位置. 然后将这个文件夹中的diamante全部赋值过来就ok了. <view class="uni-p ...

  10. 2024 MWC上海,“翼”彩纷呈!

    2024年6月26日,2024世界移动通信大会上海(简称"MWC上海")盛大开幕.围绕"未来先行"主题,来自全球的产业.技术和社区等各界代表齐聚一堂,共话产业高 ...