利用expect结合scp免输入密码传输文件

yum install -y expect

1、expect基本命令了解

spawn               交互程序开始后面跟命令或者指定程序
expect              获取匹配信息匹配成功则执行expect后面的程序动作
send exp_send       用于发送指定的字符串信息
exp_continue        在expect中多次匹配就需要用到
send_user           用来打印输出 相当于shell中的echo
exit                退出expect脚本
eof                 expect执行结束 退出
set                 定义变量
puts                输出变量
set timeout         设置超时时间

标题2、expect+Scp免密推送文件

spawn scp 文件名 root@IP:路径
set timeout -1 值为-1表示永不超时
// spawn scp各种转换都不行,不加*,只能拷贝当前目录下的文件,该目录下面的文件夹就不能拷贝过去。改成如下的代码就可以正常执行了。
//需要注意的是 expect 无法识别 shell 的语法,所以如果用了复杂的 shell 命令,会报如下错误 xxx : no such file or directory。如果想要 expect 执行复杂的 shell 命令,可以这么做 spawn bash -c {your shell commands}。

cat /opt/shell/expect_scp.sh
#!/bin/bash
expect << EOF
set timeout -1
spawn bash -c “scp -pr /home/* root@10.168.1.202:/home/”
expect {
“yes/no” {send “yes\r”;exp_continue}
“password” {send “123456\r”;}
}
expect eof
exit
EOF

==============================================

标题3、利用shell和expect结合实现后台scp大文件

//脚本可以正常运行,但是每次都传了18M就自动停止了。后来了解到,expect有默认的命令运行时限,超时后会自动停止运行,解决方法是加入set timeout 28800(超时时间为8小时),所以完整脚本如下:
cat /opt/shell/expect_scp.sh
#!/bin/bash
expect << EOF
set timeout 28800
spawn bash -c “scp -pr /home/* root@10.168.1.202:/home/”
expect {
“yes/no” {send “yes\r”;exp_continue}
“password” {send “123456\r”;}
}
expect eof
exit
EOF

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值