发稿流程,seo外包资讯,项目经理岗位职责,公益网站怎么做如何写一个sh脚本将一个本地文件通过 scp命令上传到远程的 centos服务器#xff1f; 1.1 背景需求1.2 解决方案1.3 附录1.3.1 scp命令用法与示例1.3.1.1 scp命令用法与解释1.3.1.2 scp 命令用法示例1.3.1.2.1 示例一#xff1a;从本地复制文件到远程计算机1.3.1.2.2 示例二 1.1 背景需求1.2 解决方案1.3 附录1.3.1 scp命令用法与示例1.3.1.1 scp命令用法与解释1.3.1.2 scp 命令用法示例1.3.1.2.1 示例一从本地复制文件到远程计算机1.3.1.2.2 示例二从远程计算机复制文件到本地1.3.1.2.3 示例三递归复制整个目录到远程计算机1.3.1.2.4 示例四从远程计算机下载整个目录到本地 1.3.2 expect 命令用法与示例1.3.2.1 expect 基本用法1.3.2.2 expect 用法示例示例 1自动登录 SSH示例 2自动化 FTP 文件传输示例 3交互式配置脚本 1.1 背景需求
这篇博文分享如何使用scp和expect命令写一个脚本来自动填充密码并实现自动登录并上传文件到服务器。 假设目标服务器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_server192.168.159.175
# config your remote server acccount
remote_userroot
# config your remote server password
remote_passwordtoor
# 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 ]; thenecho Upload file success!
elseecho 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_password给scp命令。\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替换为实际的远程服务器密码。 最后执行成功如下所示
1.3 附录
1.3.1 scp命令用法与示例
1.3.1.1 scp命令用法与解释
scp 命令是用于在本地计算机和远程计算机之间进行安全文件传输的工具。
它可以用来上传或下载文件和目录。以下是 scp 命令的基本用法和解释
scp [options] source_file/directory target_file/directoryscp: 是 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 userremotehost:/remote/directory/1.3.1.2.2 示例二从远程计算机复制文件到本地
scp userremotehost:/remote/file.txt /local/directory/1.3.1.2.3 示例三递归复制整个目录到远程计算机
scp -r local_directory/ userremotehost:/remote/directory/1.3.1.2.4 示例四从远程计算机下载整个目录到本地
scp -r userremotehost:/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 命令的示例
示例 1自动登录 SSH
#!/usr/bin/expect
set timeout 10
spawn ssh userhostname
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 youremail.com\r
expect Choose an option (1/2/3):
send 2\r
expect eof在这个示例中expect 脚本模拟了一个交互式配置脚本的用户输入。它运行一个名为 configure.sh 的脚本然后模拟了用户对一系列问题的响应。