> Linux命令 >

使用scp远程拷贝,自动输入用户名和密码

 在有mysql数据库的主机上备份好数据表后,我们要将它远程拷贝到本地分析,毕竟大多数情况下数据分析不能影响项目运营。
 
 说到远程拷贝第一个想到的自然是scp,这个东西专为远程拷贝设计的 ,传送过程也使用了ssh加密,但是使用scp要手动输入用户名和密码 网上有很多解决的办法,这里我使用  的是expect这个软件,说道expect这个软件 自然是异常强大,这里我们也只是使用到冰山一角,不去详细讲解 ,只为满足我们的需求..
 
 首先是安装(本人使用的系统 centos!!!),直接使用yum -y install expect 安装这个软件 ,它会帮助你安装所有的依赖,安装完成后试一下,except 如果发生了点什么说明安  装成功,喜欢源码安装的大神们就不讲了
 
  这里接着上一步,想把备份好的最新的文件拷贝到本地你可能会这样使用scp
 
  scp root@192.168.1.1:/home/XXX.sql /home 
 
将远程服务器192.168.1.1 上面/home/XXX.sql 拷贝到本地的/home目录下 那么下面我们使用expect自动输入密码 将它封装成一个shell
 
1 #!/usr/bin/expect
  2 set passwd "123456"
  3 spawn scp root@192.168.1.1:/home/xxx.sql /home
  4 expect {
  5   "密码:"
  6         {
  8           send "$passwd\n"
  9         }
 10    "pass"
 11         {
 13           send "$passwd\n"
 14         }
 15    "yes/no"
 16         {
 17           sleep 5
 18           send_user "send yes"
 19           send "yes\n"
 20         }
 21    eof
 22     {
 23         sleep 5
 24         send_user "eof\n"
 25     }
 26 }
 27 send "exit\r"
 28 expect eof
当检测到”pass“ 或者 ”密码:“字样后 使用send 发送 密码给scp程序,这里边send_user 的意思是输出到控制台 这样我们就可以将远程服务器上的备份文件拷贝到本地而且也不需要输入密码了 
哈哈,第三步结束了,我们将在下一步解决使用shell操作数据库,分析后导出结果
 
 
 
(责任编辑:IT)