今天需要做一个定时任务脚本将最新的数据包文件传到远程的服务器上,虽然有密钥但也是要求输入密码的那种,所以只能另想办法实现让脚本自动输入密码了。
从网上查到使用expect可以,简单研究了一下,效果不错。
因为我的操作系统没有安装expect,所以直接"yum -y install expect",你可以根据你的操作系统安装expect,或者源码编译。
安装好之后就可以使用了,这里有几种方法:
一、单独写一个脚本
如 auto_scp.sh:
#!/usr/bin/expect
#使用第一个参数
set server_ip [lindex $argv 0]
#后面的也可以用参数[lindex $argv n]
set server_port 22
set server_dir /home/test
set server_user test
set server_pswd test
set scp_file auto_scp.sh
# 设置超时时间
set timeout 60
spawn scp -P $server_port $scp_file $server_user@$server_ip:$server_dir
expect {
"passphrase"
{
send "$server_pswd\n";
}
"password"
{
send "$server_pswd\n";
}
"yes/no"
{
send "yes\n";
exp_continue;
}
}
expect eof
我这里的变量都是随意设置的,你可以根据你的情况进行选择,保存退出之后,对该文件加上可执行权限,运行
"./auto_scp.sh 2.2.2.2"就可以了,"2.2.2.2"就是传入的第一参数。
"passphrase"和"password"等就是要监测的输入提示的一部分,send "$server_pswd\n"就是要执行的命令。
二、在脚本中使用----我比较喜欢这个
我这里使用的是Here document方法。
......
......
expect <<!!
set timeout 60
spawn scp -P $server_port $scp_file $server_user@$server_ip:$server_dir
expect {
"passphrase"
{
send "$server_pswd\n";
}
"password"
{
send "$server_pswd\n";
}
"yes/no"
{
send "yes\n";
exp_continue;
}
}
expect eof
!!
......
变量都是我从配置文件中获取的,这里不再赘述了。
三、在脚本中使用
也是在脚本使用,但是不是用的Here document方法,而是使用expect -c 参数书,"-c"选项后面的字符串填充的就是命令。但是要注意本身字符串的转义符。
更多使用方法,请参看"man手册"。
相关推荐
shell脚本无密码登录 expect的使用方法详解 今天需要做一个定时任务脚本将最新的数据包文件传到远程的服务器上,虽然有密钥但也是要求输入密码的那种,所以只能另想办法实现让脚本自动输入密码了。 从网上查到使用...
Shell编程之expect
主要介绍了Shell脚本实现自动输入密码登录服务器,本文使用expect来实现这个需求,讲解了expect的安装及使用脚本,需要的朋友可以参考下
《Shell脚本专家指南》旨在为Linux、Unix以及OSx系统管理员提供短小精悍且功能强大的shell实现解决方案,教会读者如何使用现有调试器调试shell脚本。全书分为3个部分:脚本技术基础、系统交互和高级技术、有用的脚本...
昨天一个网友问如何能够将输入密码的工作在shell里面自动完成,研究了一下,发现这种交互式的工作,普通的shell实现不了,据说可以借助expect来搞定,所以初步学习了一下expect,成果和大家分享一下: 应用一: 实现...
关于自动化脚本expect的一个例子。本脚本功能是 实现自动输入密码登录到一个server机器上。
最近项目需要实现单边无密登录,去网上搜索了下相关文章,实践之后发现几乎都不能用。于是结合expect的使用方法自行写了一个,通过验证可用。现在总结在这供需要的朋友参考。 代码如下: EXPECT=/usr/bin/expect ...
使用shell脚本在有密码的情况下一次维护多个设备的解决方案,其中使用了工具有for、if和expect。此代码将expect和shell有机的结合起来,并使用sed进行修改文件。 压缩包涵全部的实验demo。
通过A服务器自动登录其他服务器自动传输文件、删除文件、自动检测tomcat启动状态,控制启动和停止、可配置多条服务器进行同步处理,适合集群管理
大多时候,作为Linux系统运维人员,需要编写shell脚本去批量处理一些反复的工作。虽然现在有ansible、saltstack等批量处理工具,但是在内网环境下,这些工具还需要离线安装,安装好之后还需要学会工具的使用方法,...
自动登录到多台服务器的shell脚本,用expect来实现的一段代码,需要的朋友可以参考下
shell脚本编写基础,ExpectCourse.pdf,高级Bash脚本编程指南.pdf.chm及中英两本 毫无疑问,UNIX/Linux 最重要的软件之一就是 shell,目前最流行的 shell 被称为 Bash(Bourne Again Shell),几乎所有的 Linux 和绝大部分...
shell+expect编写的 大数据集群ssh免密登录自动化配置脚本(带说明文档)
Linux运维-运维系统服务04-Shell脚本d5-Shell随机数与循环嵌套-12expect程序交互2.mp4
Linux运维-运维系统服务04-Shell脚本d5-Shell随机数与循环嵌套-13expect程序交互3.mp4
但我到现在还在对python的恐惧之中(虽然已经在空闲时间努力去学习了),所以使用了shell和expect脚本结合的方式,写了这个批量scp的脚本工具。 expect用于自动化地执行linux环境下的命令行交互任务,例如scp、ssh...
Expect-----能与交互式程序进行“可程序化”会话的脚本语言 概述: Expect是一种能够按照脚本内容里面设定的方式与交互式程序进行“会话”的程序。根据脚本内容,Expect可以知道程序会提示或反馈什么内容以及什么是...