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. shell 获取 目录名 当前目录名

    Four ways to extract the current directory name By  Sergio Gonzalez Duran on November 06, 2007 (9:00 ...

  2. 设置VirtualBox共享文件夹的方法

    1.创建共享文件夹进入linux终端,通过如下指令创建共享文件夹.在此处的/mnt/share是Linux下的共享文件夹. sudo mkdir /mnt/share2.在VirtualBox的设置中 ...

  3. error C2664: “HANDLE FindFirstFileW(LPCWSTR,LPWIN32_FIND_DATAW)”: 无法将参数 1 从“const _Elem *”转换为“LPCWSTR”

    Error 30 error C2664: 'HANDLE FindFirstFileW(LPCWSTR,LPWIN32_FIND_DATAW)' : 不能将参数 1 从"char [260 ...

  4. 首次公开,最新手机QQ客户端架构的技术演进实践

    本文由腾讯技术何金源分享,原题"不畏移山,手机QQ技术架构升级变迁史",本文进行了排版和内容优化等. 1.引言 接上篇<总是被低估,从未被超越,揭秘QQ极致丝滑背后的硬核IM ...

  5. 即时通讯技术文集(第38期):IM代码入门实践(Part2) [共15篇]

    为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第38 期. [- 1 -] 高仿Android版手机QQ首页侧滑菜单源码 [附件下载] [链接 ...

  6. Kaggle API使用范例

    kaggle.com/docs/api

  7. DVWA靶场File Inclusion (文件包含) 漏洞所有级别通关教程及源码解析

    文件包含 文件包含漏洞(File Inclusion Vulnerability)是一种常见的网络安全漏洞,主要出现在应用程序中不安全地处理文件路径时.攻击者可以利用此漏洞执行恶意文件,或者访问不该被 ...

  8. Solution -「NOI Simu.」记忆

    \(\mathscr{Description}\)   长度为 \(n\) 的序列 \(A\) 初始全 \(0\), \(C=0\). 第 \(i\ge0\) 个时刻对 \(A\) 进行如下变换: \ ...

  9. 6种微服务RPC框架-copy

    一类是跟某种特定语言平台绑定的,另一类是与语言无关即跨语言平台的. 跟语言平台绑定的开源 RPC 框架主要有下面几种. Dubbo:国内最早开源的 RPC 框架,由阿里巴巴公司开发并于 2011 年末 ...

  10. Superset config配置文件参数

    superset配置文件config.py文件参数修改相关影响:1.如果让dashboard左侧出现筛选器,dashboard可交叉筛选,将以下三个参数设置为True "DASHBOARD_ ...