轻松实现自动化文件传输——利用expect脚本进行SCP拷贝

技术颜良 / 2024-04-19 / 原文

轻松实现自动化文件传输——利用expect脚本进行SCP拷贝

在日常生活和工作中,我们经常需要在不同的服务器或计算机之间传输文件。尤其是系统管理员和开发人员,他们经常需要远程复制文件到其他机器上。这时,我们可以利用scp命令进行安全拷贝,但是每次都手动输入密码显然是非常低效的。那么,有没有一种方法可以实现自动化传输呢?答案是肯定的,那就是利用expect工具编写脚本。

图片

今天,我们就来介绍一个利用expect编写的自动化SCP拷贝脚本——scp_exec.sh,通过这个脚本,我们可以轻松地实现文件的远程自动拷贝,而无需每次都手动输入密码。

一、expect简介

expect是一个自动化交互套件,主要应用于执行命令和程序时,系统以交互形式,要求输入指定字符串,实现交互通信。因此,我们可以利用expect来模拟用户的输入操作,从而实现自动化处理。

二、脚本内容解析

下面是我们今天要介绍的scp_exec.sh脚本的内容:

#!/bin/expect  set timeout 30  set host 192.168.1.1  set user root  spawn scp /home/lyn/Documents/work-data/download_data/ $user@$host:/opt/lib/exec  #spawn ssh $user@$host  expect {  "*yes/no*"           {     send "yes\r"       expect  "*password*:" { send "123456\r" }      }    "*password*:"    {     send "123456\r"    }  }  expect eof

这个脚本的功能是将本地路径/home/lyn/Documents/work-data/download_data/下的文件或文件夹拷贝到远程服务器192.168.1.1/opt/lib/exec目录下,使用的用户是root,密码是123456

详细解析:

  1. #!/bin/expect:指定脚本解释器为expect

  2. set timeout 30:设置超时时间为30秒。如果在30秒内没有得到期望的字符串,则expect会停止执行。

  3. set host 192.168.1.1 和 set user root:分别设置远程服务器的IP地址和登录用户。

  4. spawn scp /home/lyn/Documents/work-data/download_data/ $user@$host:/opt/lib/exec:使用spawn命令启动一个新的进程来执行scp命令,将本地文件或文件夹拷贝到远程服务器。

  5. 接下来的expect块是用来处理可能出现的交互情况。当系统提示“yes/no”时(这通常发生在第一次SSH连接到一个新主机时,系统会询问你是否信任该主机),脚本会自动发送“yes”并回车。然后,当系统提示输入密码时,脚本会自动发送“123456”并回车。

  6. expect eof:表示脚本会等待前面spawn启动的进程结束。

三、使用注意事项

  1. 为了安全起见,建议不要在脚本中硬编码密码。你可以考虑使用其他方式安全地存储和传递密码,例如使用环境变量或加密的密钥文件。

  2. 请确保你的机器上已经安装了expect工具。如果没有安装,你可以使用包管理器(如aptyum等)进行安装。

  3. 根据你的实际需求修改脚本中的文件路径、服务器地址、用户名和密码等信息。

  4. 这个脚本只是一个基本示例,你可以根据自己的需求进行扩展和优化。

四、结语

通过这个scp_exec.sh脚本,我们可以实现文件的自动化远程拷贝,大大提高工作效率。同时,你也可以根据这个示例学习和掌握expect工具的使用,为你的自动化工作带来更多的可能性。希望这篇文章能对你有所帮助!

 

脚本家园

赞赏二维码喜欢作者

自动化 · 目录
上一篇自动化部署MySQL 5.7:从入门到精通,一键式安装教程
阅读 407
 
写留言