Linux使用expect和rsync实现密码自动输入无人值守自动同步备份
我们常用sudo,ssh、ftp命令操作服务器或者修改权限的时候都会要求输入password,但是shell脚本运行中该如何交互实现自动输入密码呢?
下面总结三种实现方法。
一、重定向:
用重定向方法实现交互的前提是指令需要有参数来指定密码输入方式,如ftp就有-i参数来指定使用标准输入来输入密码
shell用重定向作为标准输入的用法是:
ftp -i -n 192.168.15.16<<EOF
user john pw@2018
ls
EOF
二:管道:
跟重定向一样,指令同样要有参数来指定密码输入方式,如sudo的-S参数,passwd的-stdin参数,所以实现sudo自动输入密码的脚本如下:其中pw@2018为密码
echo 'pw@2018' | sudo -S cp fileone /tmp
实现自动修改密码的脚本写法如下:
echo 'password' | passwd -stdin username
三:expect:
上面介绍的两种方法前提条件是指令有参数来设定密码输入方式,像ssh指令就没有这样的参数,第三种交互方式就派上用场了,expect就是用来做交互用的,基本任何交互登录的场合都能使用,但是需要安装expect包。
CentOS下安装命令很简单:
sudo yum install expect
Mac用户,可以通过homebrew安装(需要先安装homebrew)
brew install expect
测试脚本:实现rsync定时同步远程服务器文件
我们写一个简单的脚本,在脚本里配置密码,保存为scp.exp如下:
1,先写好rsync.ex脚本文件,在脚本里定义变量和保存密码
#!/usr/bin/expect
set timeout 20 if { [llength $argv] < 2} {
puts "Usage:"
puts "$argv0 remote_path local_file"
exit 1
} set remote_path [lindex $argv 0]
set local_file [lindex $argv 1]
set passwd yourpassword set passwderror 0 spawn rsync -avz --delete --exclude 'var' $remote_path $local_file expect {
"*assword:*" {
if { $passwderror == 1 } {
puts "passwd is error"
exit 2
}
set timeout 1000
set passwderror 1
send "$passwd\r"
exp_continue
}
"*es/no)?*" {
send "yes\r"
exp_continue
}
timeout {
puts "connect is timeout"
exit 3
}
}
脚本说明:
> 如果是sh脚本,第一行是#!/bin/bash,而这里是你机器上expect程序的路径,说明这段脚本是由expect来解释执行的
> 第一句是设定超时时间为20s
> set passwd yourpassword设置成你自己的密码
> spawn是expect的语句,执行命令前都要加这句
2,把rsync.ex写到定时任务里
crontab -e
编辑如下,根据你自己的具体情况设置crontab参数和rsync.ex文件路径:
相关文章:CentOS等Linux服务器配置使用Rsync同步及Crontab定时任务
单独运行rsync.ex文件,如下:
expect /home/backup/rsync.ex root@45.234.21.101:/home/backup/* /local/backup/
注意:expect跟bash类似,使用时要先登录到expect,所以首行要指定使用expect
在运行脚本时候要expect rsync.ex,不能sh rsync.ex了
Linux使用expect和rsync实现密码自动输入无人值守自动同步备份的更多相关文章
- Linux使用expect实现免手动密码输入,linux免密码登陆
使用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄.收藏.可是为什么要这么写却不知其然.本文用一个最短的例子说明脚本的原理. 脚本代码如下: ###### ...
- rsync 与 inotify 的使用 & 实现实时同步备份
今日内容 rsync 内容详细 上一篇内容问题 1.yum源问题 2.VPN链接正常,但是没办法通过172 3.VPN链接时,出现了DNS错误 4.掩码不对 5.openvpn开启错误 复制的命令 1 ...
- rsync+sersync+inotify实现服务器间文件同步之一
rsync+sersync+inotify实现服务器间文件同步之一:rsync安装配置 2013年12月14日 ⁄ Linux管理, 服务器集群技术 ⁄ 共 4925字 ⁄ rsync+sersync ...
- centos6.5 rsync+inotify实现服务器之间文件实时同步
1. rsync的优点与不足 与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据 ...
- expect ------提供用户名和密码的SSH自动登录脚本
使用VPN,每次都要在Terminal上重复输入命令: ssh -D port user@host 出来密码提示符后,把复杂的密码拷贝下来,然后粘贴到Terminal,敲回车... 终于忍受不了这样的 ...
- Linux使用expect实现自动登录的脚本
前提条件服务器已经安装过tcl和expect, 若未安装:可以先执行 yum install tcl expect 进行安装 第一步.编写以下自动登录脚本login.sh ########### ...
- Linux 下 expect 脚本语言中交互处理常用命令
Linux 下 expect 脚本语言中交互处理常用命令 1. #!/usr/bin/expect 告诉操作系统脚本里的代码使用那一个 shell 来执行.这里的 expect 其实和 Linux 下 ...
- 转:使用rsync在linux(服务端)与windows(客户端)之间同步
转自:http://blog.csdn.net/old_imp/article/details/8826396 一 在linux(我用的是centos系统)上安装rsync和xinetd前先查看lin ...
- Linux Rsync实现文件同步备份(转载)
原文地址:Linux Rsync实现文件同步备份作者:夷北 转自:http://www.mike.org.cn/blog/index.php?load=read&id=639###pp=0 [ ...
随机推荐
- jQuery学习笔记之解除重复点击事情重复绑定
问题:有不同的按钮点击后都执行相同的事件,在jQuery重复点击就会产生事件重复绑定. 解决方法:使用unbind("click")方法,每次点击都先接触绑定已有事件再绑定新对象. ...
- 修改Mariadb存储路径
大部分基于此文章操作:http://lddyw.blog.51cto.com/4151746/1684364 找个好久的资料,都打算源码安装了,最后终于更改成功了. 环境:CentOS6.6 64位虚 ...
- ROS通过图形化界面控制和查看小乌龟参数
ROS图形化界面能够让我们快速开发ROS,也有利于我们观测数据. 下面介绍一下利用图形化界面控制小乌龟按照指令行进和查看小乌龟的行进参数. 首先我们需要做一些准备工作: 在Terminal中运行以下命 ...
- php第三方登录(微博登录,仿照慕课网)
https://www.cnblogs.com/haoyu521/p/5606931.html 1:开发之前,请大家先自行熟悉一下OAuth协议原理. 2:我们开发需要具备一个外网可访问的线上域名,如 ...
- Android教程 -07 Activity的任务栈和启动模式
Activity是由任务栈管理的,一般情况下一个应用程序只有一个任务栈. 什么是栈? 栈是一种常用的数据结构,栈只允许访问栈顶的元素,栈就像一个杯子,每次都只能取杯子顶上的东西 栈的特点就是先进后出, ...
- Libev源码分析01:Libev中的监视器结构(C结构体实现继承)
在Libev的源码中,用到了一种用C实现类似C++中继承的技巧,主要是用宏和结构体实现. 在Libev中,最关键的数据结构就是各种监视器,比如IO监视器,信号监视器等等.这些监视器的多数成员都是一样的 ...
- tinyhttpd简介
一:简介: tinyhttpd是由J. DavidBlackstone在1999年编写的,实现了一个很简单的web服务器.支持GET和POST方法,总代码量也就在500行左右,可以用来学习HTTP协议 ...
- 2018-2-13-win10-uwp-如何让-Page-继承泛型类
title author date CreateTime categories win10 uwp 如何让 Page 继承泛型类 lindexi 2018-2-13 17:23:3 +0800 201 ...
- phpStudy本地环境测试,打开网页很慢的解决办法!
很多人应该都遇到了在使用phpStudy本地环境测试软件时候打开很慢的问题,甚至动辄达到了1000ms以上,开篇直接给出解决办法: 下面给大家介绍phpstudy访问速度慢的解决办法. 1.修改mys ...
- iptables rc.firewall脚本代码
#!/bin/sh # # rc.firewall - Initial SIMPLE IP Firewall script for Linux 2.4.x and iptables # # Copyr ...