如何写一个sh脚本将一个本地文件通过 scp命令上传到远程的 centos服务器?

这篇具有很好参考价值的文章主要介绍了如何写一个sh脚本将一个本地文件通过 scp命令上传到远程的 centos服务器?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.1 背景需求

这篇博文分享如何使用scpexpect命令写一个脚本来自动填充密码并实现自动登录并上传文件到服务器。

  • 假设目标服务器:192.168.159.175
  • 远程文件服务器登录账号假设是 root
  • 远程文件服务器登录密码假设是 toor
  • /Users/zhaoqingfeng/downloads/test/dist/ 是前端打包部署文件夹
  • /Users/zhaoqingfeng/downloads/test/dist/ 上传到 /var/www/html/your_project/ 目录下

1.2 解决方案

执行脚本输入如下命令:

sh publish.sh 

执行命令脚本内容如下:

#!/bin/bash

# local host file folde path
local_dir="/Users/zhaoqingfeng/downloads/test/dist/"

# config remote server info
# remote server ip
remote_server="192.168.159.175"
# config your remote server acccount
remote_user="root"
# config your remote server password
remote_password="toor"
# config remote server target path
remote_dir="/var/www/html/your_project/"

# upload local file to remote server
expect -c "
spawn scp -r $local_dir $remote_user@$remote_server:$remote_dir
expect {
    \"*assword:\" {
        send \"$remote_password\r\"
        exp_continue
    }
    \"yes/no\" {
        send \"yes\r\"
        exp_continue
    }
    eof
}
"

# Check scp command
if [ $? -eq 0 ]; then
    echo "Upload file success!"
else
    echo "File upload fail"
fi

脚本含义详细解释:

  • 在这个脚本中,使用expect来处理自动登录并上传文件。
    expect -c "...":这是Expect的命令行工具,它允许您在命令行中执行Expect脚本。
    • 在这个命令中,整个Expect脚本被包含在引号内。
  • spawn scp -r $local_dir $remote_user@$remote_server:$remote_dir
    • 这一行使用spawn命令启动了一个新的进程,该进程执行scp命令来将本地目录(或文件)$local_dir传输到远程服务器$remote_server的指定目录$remote_dir
    • -r选项表示递归地复制目录。
      expect {...}:这是Expect脚本的主体,它定义了脚本的行为,根据不同的情况采取不同的操作。
    • "*assword:":这是一个Expect匹配模式(pattern),它用来匹配scp命令执行时可能出现的提示,通常是要求输入密码的提示。*通配符表示匹配任何字符,因此它可以匹配包含"assword:"的任何提示。
    • send "$remote_password\r":当匹配到密码提示时,脚本会使用send命令发送远程密码$remote_passwordscp命令。
    • \r表示回车键,以便输入密码后模拟按下回车键来提交密码。
    • exp_continue:这个命令告诉Expect继续等待并匹配下一个条件。在这种情况下,它会一直等待,直到出现新的匹配条件。
    • "yes/no":这是另一个匹配模式,用于处理SSH连接时可能出现的确认远程主机的提示,通常是在首次连接时出现的。
    • send "yes\r":当匹配到"yes/no"提示时,脚本会自动发送"yes"来确认连接。
    • eof:这个条件匹配到远程scp命令执行结束,即传输完成,并且脚本可以退出。

总体来说就是

  • 使用scp -r 命令递归遍历 /Users/zhaoqingfeng/downloads/test/dist/目录下的所有文件后都上传
  • 它会等待密码提示或是否信任主机的提示,并自动填充密码或发送"yes"以完成操作。
  • 最后,检查scp命令的退出状态以确定上传是否成功。确保将remote_password替换为实际的远程服务器密码。

最后执行成功如下所示:
如何写一个sh脚本将一个本地文件通过 scp命令上传到远程的 centos服务器?,# sh脚本学习手册,服务器,centos,linux

1.3 附录

1.3.1 scp命令用法与示例

1.3.1.1 scp命令用法与解释

scp 命令是用于在本地计算机和远程计算机之间进行安全文件传输的工具。

它可以用来上传或下载文件和目录。以下是 scp 命令的基本用法和解释:

scp [options] source_file/directory target_file/directory

scp: 是 Secure Copy 的缩写,用于进行安全的文件复制。

  • options: 可以是一些标志,用于自定义传输行为。一些常见的选项包括:
    • -r:递归复制,用于复制目录及其内容。
    • -P <端口号>:指定远程 SSH 服务器的端口号。
    • -i <身份验证密钥文件>:指定身份验证密钥文件。
    • -v:详细模式,显示详细的传输信息。
  • source_file/directory: 指定要传输的文件或目录的路径。这可以是本地文件系统上的路径或远程计算机上的路径。如果是远程路径,通常以 <用户名>@<远程主机>:<路径> 的格式指定。
  • target_file/directory: 指定传输的目标位置。与源相似,可以是本地或远程路径。
1.3.1.2 scp 命令用法示例

以下是一些示例 scp 命令用法:

1.3.1.2.1 示例一:从本地复制文件到远程计算机
scp localfile.txt user@remotehost:/remote/directory/
1.3.1.2.2 示例二:从远程计算机复制文件到本地
scp user@remotehost:/remote/file.txt /local/directory/
1.3.1.2.3 示例三:递归复制整个目录到远程计算机
scp -r local_directory/ user@remotehost:/remote/directory/
1.3.1.2.4 示例四:从远程计算机下载整个目录到本地
scp -r user@remotehost:/remote/directory/ /local/directory/
  • 这些示例演示了 scp 命令的基本用法,可以根据需要使用不同的选项和参数来满足具体的文件传输需求。
  • 需要注意的是,scp 使用 SSH 协议来保证传输的安全性,因此需要在远程主机上启用 SSH 服务。

1.3.2 expect 命令用法与示例

  • expect 是一个用于自动化交互式任务的命令行工具,它允许你编写脚本来模拟用户输入和对命令行程序的预期输出做出响应。
  • 通常用于自动化任务、测试和自动化配置。

下面是 expect 命令的一些基本用法和示例:

1.3.2.1 expect 基本用法

expect 命令的基本语法如下:

expect [选项] <期望模式> <动作>

选项:可以包括一些常见的选项,如 -c 用于指定要执行的 expect 脚本代码。

<期望模式>:这是一个正则表达式,用于匹配命令行程序的输出,以确定下一步的操作。

<动作>:这是要执行的命令或操作,通常是响应匹配到的输出。

1.3.2.2 expect 用法示例

以下是一些 expect 命令的示例:文章来源地址https://www.toymoban.com/news/detail-697332.html

示例 1:自动登录 SSH
#!/usr/bin/expect
set timeout 10
spawn ssh user@hostname
expect "password:"
send "your_password\r"
expect "$"
send "ls -l\r"
expect "$"
send "exit\r"
  • 在这个示例中,expect 脚本模拟了 SSH 登录。
  • 它启动 SSH 连接,等待看到 “password:”,
  • 然后发送密码, 接着等待 “$” 提示符,发送了一个 “ls -l” 命令,
  • 最后发送 “exit” 退出 SSH 会话。
示例 2:自动化 FTP 文件传输
#!/usr/bin/expect
set timeout 10
spawn ftp ftp.example.com
expect "Name (ftp.example.com:user):"
send "your_username\r"
expect "Password:"
send "your_password\r"
expect "ftp>"
send "put localfile.txt remotefile.txt\r"
expect "ftp>"
send "quit\r"

  • 这个示例展示了如何使用 expect 自动化 FTP 文件传输。
  • 它启动了一个 FTP 会话,输入用户名和密码,
  • 然后上传一个本地文件到远程服务器。
示例 3:交互式配置脚本
#!/usr/bin/expect
set timeout 10
spawn ./configure.sh
expect "Enter your name:"
send "Your Name\r"
expect "Enter your email:"
send "your@email.com\r"
expect "Choose an option (1/2/3):"
send "2\r"
expect eof
  • 在这个示例中,expect 脚本模拟了一个交互式配置脚本的用户输入。
  • 它运行一个名为 configure.sh 的脚本,
  • 然后模拟了用户对一系列问题的响应。

到了这里,关于如何写一个sh脚本将一个本地文件通过 scp命令上传到远程的 centos服务器?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux中使用SCP命令进行上传或者下载文件

    SCP(Secure Copy Protocol)是一种基于SSH的在网络上安全传输文件的文件传输协议,使用SSH(Secure Shell)加密技术来保证数据在传输过程中的安全性。SCP 命令是Linux主机之间进行上传或者下载文件的最常用的命令,这是一个功能非常强大的工具,可以在任意二个主机之间快速的上传与

    2024年02月16日
    浏览(35)
  • linux ssh上传下载文件命令SCP使用方法

    在linux环境里,我们从服务器上下载或者从本地上传文件到服务器上可以通过 SCP命令 来实现。 SCP即Security Copy,是基于SSH登录实现的远程文件拷贝命令 。 命令参数: -r: 递归复制整个文件夹 -i :询问是否覆盖 -p :保留文件 具体使用方法如下: scp 本地文件路径 用户名@ServerIP:

    2024年02月16日
    浏览(28)
  • 通过定时任务+sh脚本方式实现服务器日志文件异机备份

    等保要求服务器A日志(服务器、数据库、后端、nginx、redis等)备份在另外一台服务器B上 通过定时任务+sh脚本+scp命令,实现定时执行脚本,将文件备份到另外一台服务器上 step1、准备工作 服务器A ipA 服务器B ipB step2、脚本命令backup.sh 服务器A上,以nginx日志为例 step3、配对秘钥

    2024年02月16日
    浏览(32)
  • 【Git】Windows如何运行.sh脚本文件

    在Windows系统中运行.sh脚本需要借助第三方工具,比如Git Bash、Cygwin或WSL(Windows Subsystem for Linux)等。 以下是使用Git Bash运行.sh脚本的步骤: 安装Git Bash:从Git官方网站(https://git-scm.com/downloads)下载并安装Git。 打开Git Bash终端。 进入.sh脚本所在的目录,可以使用 cd 命令。 运

    2024年02月12日
    浏览(28)
  • Windows系统下如何运行.sh脚本文件

    前言: .sh文件是一种命令脚本文件,在Windows系统下可以通过命令行工具打开运行。通常可以使用Git工具来打开运行.sh脚本文件。不过很多第一次使用Git的人,可能对Git工具不熟悉。.sh文件在命令行运行时是有固定写法的,下面介绍详细步骤。 1.下载并安装Git 首先,建议先挂

    2024年02月11日
    浏览(30)
  • Ubuntu远程服务与本地文件互传-scp命令(外网服务器也可以)

    1、从服务器下载文件到本地 2、上传本地文件到服务器 3、SCP高级用法 通过指定端口号进行传输 递归复制目录及其内容 scp过程中显示详细信息

    2024年02月03日
    浏览(73)
  • History命令解释,及一个相关的bash脚本(如何编写脚本程序从记录文件中提取history命令)

    目                录 一、history命令介绍 1、history命令是什么? 2、history的主要功能 二、history命令的用法 1、语法 2、选项说明 3、命令实例 三、history和历史记录文件bash_history 四、history命令的相关配置 1,命令带时间展示-HISTTIMEFORMAT 2,命令行数大小-HISTSIZE 3、设置命令保

    2024年01月23日
    浏览(75)
  • 如何SCP从服务器远程下载文件到本地

    1、SCP的命令格式如下:scp [参数] [原路径] [目标路径] (1)复制本地文件abc.tar.gz到远程主机123.123.123.123上: 1 scp -P 2233 /home/abc.tar.gz root@123.123.123.123:/root/abc.tar.gz 其中:-P 2233表示端口,如果你的原VPS主机没有修改过端口,使用的默认的22的话,可不用写-P 2233这样的。 (2)获取远程服

    2024年02月11日
    浏览(40)
  • 如何在Linux系统中使用SCP命令传输文件和文件夹?

    在Linux系统中,SCP(Secure Copy)是一种用于在本地和远程主机之间安全传输文件和文件夹的命令行工具。它基于SSH协议,并提供了加密和身份验证机制,确保数据的安全性和完整性。 本文将详细介绍如何使用SCP命令在Linux系统中传输文件和文件夹。 SCP命令的基本语法如下: 选

    2024年02月06日
    浏览(39)
  • VScode遇到python程序是通过sh文件启动的,如何调试

    下载的源码总会遇到这样启动的: 并且发现shell文件内容很多,比较复杂,比如: 这时候想要调试,可以通过端口连接的方式调试,具体方法如下: 在vscode调试按钮中添加远程附加调试,地址和端口选择默认(localhost,5678),得到如下配置: 在shell文件中更改python启动指令

    2024年01月25日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包