Curl实现Linux到Windows(FTP)的数据同步

简介:

我们今天主要介绍,如何使用Curl将linux的数据拷贝到Windows上,其实说到需求,其实有很多办法,比如scp、rsync及mount等工具或方法都可以实现Linux到Windows的数据同步,今天我们主要介绍Curl的数据同步方法,使用Curl的缺陷就是需要在Windows上启用FTP服务,然后配置目录等信息,对于其他的方法,我们会在后面的文章再做介绍,

我们首先在windows上需要启用FTP服务,服务器管理器---添加WEB服务器(IIS)

clip_image001[3]

在IIS角色服务中勾选启用FTP服务器等角色

clip_image002

clip_image003

安装完成

clip_image004

接下来打开IIS管理器;网站---添加FTP站点

clip_image005

配置FTP物理路劲

clip_image006

我们配置FTP站点的信息,比如地址及端口信息

clip_image007

我们创建一个ftpuser用户,主要用来传输文件的认证信息

clip_image008

然后配置身份认证方式,选择基本,然后指定用户或用户组都可以,配置权限读写

clip_image009

配置完成

clip_image010

我们通过浏览器访问FTP服务进行测试

clip_image011

我们在目录下创建一个测试文件

clip_image012

刷新FTP访问可以显示

clip_image013

我们也可以打开文件显示

clip_image014

接下来我们要测试将linux上的文件上传到ftp上

我们首先使用 首先需要在linux安装 curl服务

1
yum  install  -y curl

clip_image015

clip_image016

安装后,我们首先查看curl有哪些参数

1
curl --help

clip_image017

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
[root@DB1 ~] # curl --help
Usage: curl [options...] <url>
Options: (H) means HTTP /HTTPS  only, (F) means FTP only
--anyauth Pick  "any"  authentication method (H)
-a /--append  Append to target  file  when uploading (F /SFTP )
--basic Use HTTP Basic Authentication (H)
--cacert < file > CA certificate to verify peer against (SSL)
--capath <directory> CA directory to verify peer against (SSL)
-E /--cert  <cert[: passwd ]> Client certificate  file  and password (SSL)
--cert- type  < type > Certificate  file  type  (DER /PEM/ENG ) (SSL)
--ciphers <list> SSL ciphers to use (SSL)
--compressed Request compressed response (using deflate or  gzip )
-K /--config  < file > Specify  which  config  file  to  read
--connect-timeout <seconds> Maximum  time  allowed  for  connection
-C /--continue-at  <offset> Resumed transfer offset
-b /--cookie  <name=string /file > Cookie string or  file  to  read  cookies from (H)
-c /--cookie-jar  < file > Write cookies to this  file  after operation (H)
--create- dirs  Create necessary  local  directory hierarchy
--crlf Convert LF to CRLF  in  upload
--crlfile < file > Get a CRL list  in  PEM  format  from the given  file
-d /--data  <data> HTTP POST data (H)
--data-ascii <data> HTTP POST ASCII data (H)
--data-binary <data> HTTP POST binary data (H)
--data-urlencode <name=data /name @filename> HTTP POST data url encoded (H)
--delegation STRING GSS-API delegation permission
--digest Use HTTP Digest Authentication (H)
--disable-eprt Inhibit using EPRT or LPRT (F)
--disable-epsv Inhibit using EPSV (F)
-D /--dump-header  < file > Write the headers to this  file
--egd- file  < file > EGD socket path  for  random data (SSL)
--engine <eng> Crypto engine to use (SSL).  "--engine list"  for  list
-f /--fail  Fail silently (no output at all) on HTTP errors (H)
-F /--form  <name=content> Specify HTTP multipart POST data (H)
--form-string <name=string> Specify HTTP multipart POST data (H)
-- ftp -account <data> Account data to send when requested by server (F)
-- ftp -alternative-to-user <cmd> String to replace  "USER [name]"  (F)
-- ftp -create- dirs  Create the remote  dirs  if  not present (F)
-- ftp -method [multicwd /nocwd/singlecwd ] Control CWD usage (F)
-- ftp -pasv Use PASV /EPSV  instead of PORT (F)
-P /--ftp-port  <address> Use PORT with address instead of PASV (F)
-- ftp -skip-pasv-ip Skip the IP address  for  PASV (F)
-- ftp -ssl Try SSL /TLS  for  ftp  transfer (F)
-- ftp -ssl-ccc Send CCC after authenticating (F)
-- ftp -ssl-ccc-mode [active /passive ] Set CCC mode (F)
-- ftp -ssl-control Require SSL /TLS  for  ftp  login,  clear  for  transfer (F)
-- ftp -ssl-reqd Require SSL /TLS  for  ftp  transfer (F)
-G /--get  Send the -d data with a HTTP GET (H)
-g /--globoff  Disable URL sequences and ranges using {} and []
-H /--header  <line> Custom header to pass to server (H)
-I /--head  Show document info only
-h /--help  This help text
--hostpubmd5 <md5> Hex encoded MD5 string of the host public key. (SSH)
-0 /--http1 .0 Use HTTP 1.0 (H)
--ignore-content-length Ignore the HTTP Content-Length header
-i /--include  Include protocol headers  in  the output (H /F )
-k /--insecure  Allow connections to SSL sites without certs (H)
--interface <interface> Specify network interface /address  to use
-4 /--ipv4  Resolve name to IPv4 address
-6 /--ipv6  Resolve name to IPv6 address
-j /--junk-session-cookies  Ignore session cookies  read  from  file  (H)
--keepalive- time  <seconds> Interval between keepalive probes
--key <key> Private key  file  name (SSL /SSH )
--key- type  < type > Private key  file  type  (DER /PEM/ENG ) (SSL)
--krb <level> Enable Kerberos with specified security level (F)
--libcurl < file > Dump libcurl equivalent code of this  command  line
--limit-rate <rate> Limit transfer speed to this rate
-l /--list-only  List only names of an FTP directory (F)
-- local -port <num>[-num] Force use of these  local  port numbers
-L /--location  Follow Location: hints (H)
--location-trusted Follow Location: and send auth to other hosts (H)
-M /--manual  Display the full manual
--max-filesize <bytes> Maximum  file  size to download (H /F )
--max-redirs <num> Maximum number of redirects allowed (H)
-m /--max-time  <seconds> Maximum  time  allowed  for  the transfer
--negotiate Use HTTP Negotiate Authentication (H)
-n /--netrc  Must  read  .netrc  for  user name and password
--netrc-optional Use either .netrc or URL; overrides -n
-N /--no-buffer  Disable buffering of the output stream
--no-keepalive Disable keepalive use on the connection
--no-sessionid Disable SSL session-ID reusing (SSL)
--noproxy Comma-separated list of hosts  which  do  not use proxy
--ntlm Use HTTP NTLM authentication (H)
-o /--output  < file > Write output to < file > instead of stdout
--pass <pass> Pass phrase  for  the private key (SSL /SSH )
--post301 Do not switch to GET after following a 301 redirect (H)
--post302 Do not switch to GET after following a 302 redirect (H)
- #/--progress-bar Display transfer progress as a progress bar
-x /--proxy  <host[:port]> Use HTTP proxy on given port
--proxy-anyauth Pick  "any"  proxy authentication method (H)
--proxy-basic Use Basic authentication on the proxy (H)
--proxy-digest Use Digest authentication on the proxy (H)
--proxy-negotiate Use Negotiate authentication on the proxy (H)
--proxy-ntlm Use NTLM authentication on the proxy (H)
-U /--proxy-user  <user[:password]> Set proxy user and password
--proxy1.0 <host[:port]> Use HTTP /1 .0 proxy on given port
-p /--proxytunnel  Operate through a HTTP proxy tunnel (using CONNECT)
--pubkey <key> Public key  file  name (SSH)
-Q /--quote  <cmd> Send  command (s) to server before  file  transfer (F /SFTP )
--random- file  < file > File  for  reading random data from (SSL)
-r /--range  <range> Retrieve only the bytes within a range
--raw Pass HTTP  "raw" , without any transfer decoding (H)
-e /--referer  Referer URL (H)
-O /--remote-name  Write output to a  file  named as the remote  file
--remote-name-all Use the remote  file  name  for  all URLs
-R /--remote-time  Set the remote  file 's  time  on the  local  output
-X /--request  < command > Specify request  command  to use
--retry <num> Retry request <num>  times  if  transient problems occur
--retry-delay <seconds> When retrying, wait this many seconds between each
--retry-max- time  <seconds> Retry only within this period
-S /--show-error  Show error. With -s,  make  curl show errors when they occur
-s /--silent  Silent mode. Don't output anything
--socks4 <host[:port]> SOCKS4 proxy on given host + port
--socks4a <host[:port]> SOCKS4a proxy on given host + port
--socks5 <host[:port]> SOCKS5 proxy on given host + port
--socks5- hostname  <host[:port]> SOCKS5 proxy, pass host name to proxy
--socks5-gssapi-service <name> SOCKS5 proxy service name  for  gssapi
--socks5-gssapi-nec Compatibility with NEC SOCKS5 server
-Y /--speed-limit  Stop transfer  if  below speed-limit  for  'speed-time'  secs
-y /--speed-time  Time needed to trig speed-limit abort. Defaults to 30
-2 /--sslv2  Use SSLv2 (SSL)
-3 /--sslv3  Use SSLv3 (SSL)
--stderr < file > Where to redirect stderr. - means stdout
--tcp-nodelay Use the TCP_NODELAY option
-t /--telnet-option  <OPT=val> Set telnet option
-z /--time-cond  < time > Transfer based on a  time  condition
-1 /--tlsv1  Use => TLSv1 (SSL)
--tlsv1.0 Use TLSv1.0 (SSL)
--tlsv1.1 Use TLSv1.1 (SSL)
--tlsv1.2 Use TLSv1.2 (SSL)
--trace < file > Write a debug trace to the given  file
--trace-ascii < file > Like --trace but without the hex output
--trace- time  Add  time  stamps to trace /verbose  output
-T /--upload-file  < file > Transfer < file > to remote site
--url <URL> Set URL to work with
-B /--use-ascii  Use ASCII /text  transfer
-u /--user  <user[:password]> Set server user and password
-A /--user-agent  <string> User-Agent to send to server (H)
- v /--verbose  Make the operation  more  talkative
-V /--version  Show version number and quit
-w /--write-out  < format > What to output after completion
-q

翻译过来我们经常会使用一下上传

1
2
3
- #/--progress-bar 进度条显示当前的传送状态
-T /--upload-file  < file >                  上传文件
-O/—download  file                       下载文件

我们先使用curl命令列表ftp服务器上的目录列表

1
2
crul  ftp : //192 .168.6.188:8888/ --user ftpuser:ftpuserpassword
crul  ftp : //192 .168.6.188:8888/ -u ftpuser:ftpuserpassword

clip_image018

1
curl  ftp : //ftpuser :ftpuserpassword@192.168.6.188:8888


clip_image019

1
2
3
4
我们下载一个文件
curl  ftp : //192 .168.6.188:8888 /hello .txt -u ftpuser:ftpuserpwd2016 -o hello.txt
或者命令
curl -u ftpuser:ftppass -O  ftp : //192 .168.6.188:8888 /hello .txt

clip_image020

1
2
3
4
5
6
7
如果需要下载全部文件:
curl -u ftpuser:ftppass -Oftp: //192 .168.6.188:8888/
  
最后我们尝试上传一个文件
curl -u ftpuser:ftpuserpwd -T 1.txt  ftp : //192 .168.6.188:8888/
如果需要上传多个文件
curl -u ftpuser:ftppass -T  "{file1,file2}"  ftp : //192 .168.6.188:8888/

clip_image021

clip_image022

因为我们要定期自动上传,所以,我们需要将该命令编写成一个shell脚本;最简单的方法是

1
2
3
4
5
6
#!/bin/bash
user=”ftpuser”
pwd =”ftpuserpwd”
#curl -u ftpuser::ftpuserpwd -T 1.txt ftp://192.168.6.188:8888/
curl –u $user$ pwd -T 1.txt  ftp : //192 .168.6.188:8888/
exit

然后我们可以使用crontal -e进行编辑计划任务

1
2
30 23 * * *  shell路劲  每天23点30执行脚本
23 23 * * *   /root/uploadfile .sh



本文转自 高文龙 51CTO博客,原文链接:http://blog.51cto.com/gaowenlong/1856299,如需转载请自行联系原作者
相关文章
|
6月前
|
安全 Linux 生物认证
Nexpose 8.25.0 for Linux & Windows - 漏洞扫描
Nexpose 8.25.0 for Linux & Windows - 漏洞扫描
248 0
Nexpose 8.25.0 for Linux & Windows - 漏洞扫描
|
6月前
|
安全 Linux iOS开发
Binary Ninja 5.1.8104 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
Binary Ninja 5.1.8104 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
605 53
Binary Ninja 5.1.8104 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
|
6月前
|
安全 Linux 生物认证
Nexpose 8.24.0 for Linux & Windows - 漏洞扫描
Nexpose 8.24.0 for Linux & Windows - 漏洞扫描
322 17
Nexpose 8.24.0 for Linux & Windows - 漏洞扫描
|
6月前
|
SQL 安全 Linux
Metasploit Pro 4.22.8-20251014 (Linux, Windows) - 专业渗透测试框架
Metasploit Pro 4.22.8-20251014 (Linux, Windows) - 专业渗透测试框架
312 1
Metasploit Pro 4.22.8-20251014 (Linux, Windows) - 专业渗透测试框架
|
6月前
|
Linux 网络安全 iOS开发
Metasploit Framework 6.4.95 (macOS, Linux, Windows) - 开源渗透测试框架
Metasploit Framework 6.4.95 (macOS, Linux, Windows) - 开源渗透测试框架
601 1
Metasploit Framework 6.4.95 (macOS, Linux, Windows) - 开源渗透测试框架
|
6月前
|
Linux 虚拟化 iOS开发
VMware Remote Console 13.0.1 for macOS, Linux, Windows - vSphere 虚拟机控制台的桌面客户端
VMware Remote Console 13.0.1 for macOS, Linux, Windows - vSphere 虚拟机控制台的桌面客户端
1418 0
VMware Remote Console 13.0.1 for macOS, Linux, Windows - vSphere 虚拟机控制台的桌面客户端
|
6月前
|
Linux iOS开发 计算机视觉
GIMP 3.0.6 (Linux, macOS, Windows) 发布 - 免费开源图像编辑器
GIMP 3.0.6 (Linux, macOS, Windows) 发布 - 免费开源图像编辑器
506 0
|
7月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
800 1
二、Linux文本处理与文件操作核心命令
|
7月前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
463 137
|
7月前
|
安全 Ubuntu Unix
一、初识 Linux 与基本命令
玩转Linux命令行,就像探索一座新城市。首先要熟悉它的“地图”,也就是/根目录下/etc(放配置)、/home(住家)这些核心区域。然后掌握几个“生存口令”:用ls看周围,cd去别处,mkdir建新房,cp/mv搬东西,再用cat或tail看文件内容。最后,别忘了随时按Tab键,它能帮你自动补全命令和路径,是提高效率的第一神器。
1260 58