linux 用expect脚本实现scp服务器之间的文件备份

1.使用命令copy备份文件

xx@test:$  sudo scp -P 端口号 用户名@服务器ip(域名也可以):外网文件路径 内网保存的路径

例如:

外网服务器为:192.168.0.1 端口号是2000 用户名为 jerry

文件路径为: /home/jerry   文件名为:001.jpg

内网服务器为:192.168.0.2  保存路径为: /home/jerry/

命令为:

sudo scp -P 2000 [email protected]:/home/jerry/001.jpg /home/jerry/
如果要拷贝整个文件夹可以加 “-r”就可以了,例如:
sudo scp -r -P 2000 [email protected]:/home/jerry/svn /home/jerry/
2.使用expect脚本实现由外网备份到内网:
由于在使用命令中需要输入外网服务器的密码,所以使用普通脚本自动备份就显然不可行了,不过可以采用以下办法解决:
使用脚本实现的方法有两种: 第一种是编写一个shell脚本(普通的脚本),然后把你的本地主机用户的ssh公匙文件写入到远程主机用户的~/.ssh/authorized_keys文件中,具体方法是 假设本地主机localhost,远程主机remote
:先屏蔽scp命令调用时出现的口令提示,在localhost主机里的用户
运行 ssh-keygen -t rsa
结果如下
Generating public/private rsa key pair.
Enter file in which to save the key (/home/.username/ssh/id_rsa):#回车
Enter passphrase (empty for no passphrase):#回车
Enter same passphrase again:#回车
Your identification has been saved in /home/.username /.ssh/id_rsa.
Your public key has been saved in /home/.username /.ssh/id_rsa.pub.
The key fingerprint is:
38:25:c1:4d:5d:d3:89:bb:46:67:bf:52:af:c3:17:0c username@localhost
Generating RSA keys:
Key generation complete.
会在用户目录~/.ssh/产生两个文件,id_rsa,id_rsa.pub
把id_rsa.pub文件拷贝到remote主机的用户目录下 然后再运行如下命令
cat id_rsa.pub >~/.ssh/authorized_keys
它将在/root/.ssh/目录下面生成authorized_keys这个文件
完成以后,在命令提示符下面输入SCP命令测试一下
如:scp /opt/dbback/data/aa.dmp.zip [email protected]:/opt/dbback/
手工测试的时候,系统会提示你Are you sure you want to continue connecting (yes/no)? yes 我在这里输入yes 回车以后,系统就开始拷贝文件。
使用这种方式的好处可以实现多台服务器之间的备份,不过我测试一下这种方法,还没有测试通,可能公共密匙存放的位置不对吧,就是配置起来比较啰嗦。
第二种实现方式编写一个expect脚本这种方式的好处是可以在脚本加入外网服务器的密码

创建脚本文件: sudo touch sec.exp

编辑脚本文件: sudo vim sec.exp

#!/usr/bin/expect -f
set password 123456   //设置外网服务器密码123456
#download
set path backup/svn  //设置外网的备份路径

spawn scp -r -P 2000 [email protected]:/home/jordy/$path /home/jerry/
set timeout 300
expect "jerry@192.168.0.1's password:"
set timeout 3000
#exec sleep 1
send "$password/r"
set timeout 300
send "exit/r"
#expect eof
interact
修改sec.exp权限:

sudo chmod 777 sec.exp

运行sec.exp脚本: ./sec.exp

运行sec.exp脚本成功,效果如图:



操作完成,如果需要做定时执行脚本,可以参考ubuntu定时执行.sh脚本博客

你可能感兴趣的:(linux 用expect脚本实现scp服务器之间的文件备份)