使用WinSCP进行简单代码文件同步
传输协议
FTP
FTPS
SFTP
SCP
为什么使用WinSCP?
CMD的FTP命令
FileZilla
PuTTY
rsync
Sublime的SFTP插件
WinSCP
WinSCP进行简单代码文件同步
总结
备注
参考
前言
以前写代码的时候,大多数时候是本地环境开发,然后统一FTP拖拽上传,所以一般来说本地查看修改效果即可。后来项目变大,文件越来越多,项目分工合作,整合项目配置本地环境就变得非常复杂了,并且团队代码不能实时同步更新,所以一般来说会采用线上测试服务器,进行统一的测试开发。那么修改代码之后的手动上传,就成了非常耗时的事情,文件夹切换来切换去拖拽,有时候自己都晕了,所以自动化的脚本部署必不可少,不光是开发的时候使用,服务器上线之后的分布式服务器部署也有用,通过git的代码提交钩子等,我们可以完成整个代码部署的自动化。
尝试的过程中遇到挺多坑,记录总结一下,先从协议开始。
传输协议
FTP
FTP(File Transfer Protocol):是TCP/IP网络上两台计算机传送文件的协议,FTP是在TCP/IP网络和INTERNET上最早使用的协议之一,它属于网络协议组的应用层。FTP客户机可以给服务器发出命令来下载文件,上载文件,创建或改变服务器上的目录。相比于HTTP,FTP协议要复杂得多。复杂的原因,是因为FTP协议要用到两个TCP连接,一个是命令链路,用来在FTP客户端与服务器之间传递命令;另一个是数据链路,用来上传或下载数据。FTP是基于TCP协议的,因此iptables防火墙设置中只需要放开指定端口(21 + PASV端口范围)的TCP协议即可。
FTP的PORT(主动模式)和PASV(被动模式)
PORT中文称为主动模式,工作的原理: FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,客户端随机开放一个端口(1024以上),发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据,原理如下图:
PASV是Passive的缩写,中文成为被动模式,工作原理:FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口进行数据传输,原理如下图:
FTPS
即FTP借助SSL协议加密传输,不但要用FTP服务器还要用SSL协议加密。
SFTP
Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。SFTP 与 FTP 有着几乎一样的语法和功能。SFTP 为 SSH的一部分。SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。
SCP
SCP就是secure copy,是用来进行远程文件拷贝的。数据传输使用 SSH,并且和SSH 使用相同的认证方式,提供相同的安全保证 。 与RCP 不同的是,SCP 在需要进行验证时会要求你输入密码或口令。
为什么使用WinSCP?
测试服务器是Windows的,用的FileZilla Server作为FTP服务器,FileZilla Server不支持SFTP,只支持FTP和FTPS
CMD的FTP命令
CMD是自带有FTP命令的,一开始的时候就打算用FTP命令来写脚本部署完事,但是悲剧的是,只支持主动模式,这就意味着只能由服务器连接到我们主机,但是我们是内网啊,做路由NAT映射又太麻烦了,所以第一次尝试失败告终
FileZilla
FileZilla的GUI客户端其实挺好用的,主流协议都支持,但悲剧的是,FileZilla只有客户端GUI模式,没有cli模式!!这就非常尴尬了…
PuTTY
PuTTY 提供了两个文件传输工具,PSCP (PuTTY Secure Copy client)和PSFTP (PuTTY SFTP client)
PSCP 通过 SSH 连接,在两台机器之间安全的传输文件,可以用于任何 SSH(包括 SSH v1、SSH v2) 服务器。
PSFTP 则是 SSH-2 中新增的特性,使用的是新的 SFTP 协议,使用上与传统的 FTP 类似。事实上 PSCP 如果发现 SFTP 可用,PSCP就会使用 SFTP 协议来传输文件,否则还是 SCP 协议。PSFTP 与 PSCP 相比,PSFTP 的优点是可以与服务器进行交互,遍历服务器上的文件系统,在一个会话中上传或下载多个文件。而 PSCP 只能一次传输一个文件,传输完毕后立刻终止会话。
但是悲剧的是,FileZilla Server不支持SFTP!!!
rsync
rsync全称remote sync,是一种更高效、可以本地或远程同步的工具,之所以高效是因为rsync会对需要同步的源和目的进度行对比,只同步有改变的部分,所以比scp命令更高效,但是rsync本身是一种非加密的传输,可以借助-e选项来设置具备加密功能的承载工具进行加密传输。
但是rsync主要是linux下使用,所以略过
Sublime的SFTP插件
插件在开发写代码过程中挺好用的,但必须依附于Sublime才能用,没有CLI模式,无法实现脚本化部署。无法对其扩展定制。
WinSCP
最后上stackoverflow上面找到了答案,是WinSCP的作者亲自解答的。
主流的FTP传输协议都支持,并且提供cli的模式,最重要的是!新版本提供了synchronize命令,使用的时候更加方便。
WinSCP进行简单代码文件同步
https://winscp.net/eng/docs/scripting
1、写个.bat文件让WinSCP来执行脚本文件
@echo off
cd E:\工具\winscp553
e:
winscp /script=C:\Users\Leestar\Desktop\script
rem pause
2、写WinSCP的脚本文件
open ftp://username:password@address -passive
put D:\test\test.php /wwwroot/test/test.php
exit
#synchronize remote D:\test /wwwroot/test
#put -neweronly D:\D:\test /wwwroot/test
#低版本没有neweronly,注意下载最新版本
3、cmd运行.bat进行同步。
总结
通过WinSCP,我们实现了简单的代码文件同步,释放双手,节约了部署时间,基于此我们还能够定制项目的部署方案。
学习过程中还发现了一个好东西——Walle
Walle 一个web部署系统工具,配置简单、功能完善、界面流畅、开箱即用!支持git、svn版本管理,支持各种web代码发布,PHP,Python,JAVA等代码的发布、回滚,可以通过web来一键完成。
原理图如下:
备注
Telnet
- Telnet是电信(Telecommunications)和网络(Networks)的联合缩写,这是一种在UNIX平台上最为人所熟知的网络协议。
- Telnet使用端口23,它是专门为局域网设计的。
- Telnet不是一种安全通信协议,因为它并不使用任何安全机制,通过网络/互联网传输明文格式的数据,包括密码,所以谁都能嗅探数据包,获得这个重要信息。
- Telnet中没有使用任何验证策略及数据加密方法,因而带来了巨大的安全威胁,这就是为什么telnet不再用于通过公共网络访问网络设备和服务器。
- 在Linux系统上,telnet很容易使用yum来安装:
SSH
- SSH代表安全外壳(Secure Shell),它现在是通过互联网访问网络设备和服务器的唯一的主要协议。
- SSH默认情况下通过端口22运行;不过,很容易更改这个端口。
- SSH是一种非常安全的协议,因为它共享并发送经过加密的信息,从而为通过互联网等不安全的网络访问的数据提供了机密性和安全性。
- 一旦通讯的数据使用SSH经过加密,就极难解压和读取该数据,所以我们的密码在公共网络上传输也变得很安全。
- SSH还使用公钥用于对访问服务器的用户验证身份,这是一种很好的做法,为我们提供了极高的安全性。
- SSH主要用在所有流行的操作系统上,比如Unix、Solaris、Red-Hat Linux、CentOS和Ubuntu等。
支持本地以及SFTP的GUI文件同步工具
http://www.freefilesync.org
参考
http://pigga.iteye.com/blog/2338157
https://en.wikipedia.org/wiki/List_of_FTP_commands
http://desert3.iteye.com/blog/1684130
https://en.wikipedia.org/wiki/List_of_FTP_commands
https://winscp.net/eng/docs/script_upload_file_list#scripting
https://winscp.net/eng/docs/scriptcommand_synchronize
http://blog.csdn.net/emili/article/details/6858818
使用WinSCP进行简单代码文件同步的更多相关文章
- 公司和家里代码文件同步方案: (git和dropbox实现)
公司和家里代码文件同步方案: (git和dropbox实现) 参与公司福利购入了有补贴的macbook pro后, 就不用上下班背着电脑了. 但是也出现了另外一问题: 家里和公司代码同步的问题 公司有 ...
- Linux下简单粗暴使用rsync实现文件同步备份【转】
这篇来说说如何安全的备份,还有一点不同的是上一篇是备份服务器拉取数据,这里要讲的是主服务器如何推送数据实现备份. 一.备份服务器配置rsync文件 vim /etc/rsyncd.conf #工作中指 ...
- 云server之间实时文件同步和文件备份的最简单高效的免费方案
分布于不同云计算中心的多台云server,通常须要进行文件同步.以满足业务的须要. 传统的文件同步方案,部署繁琐.同步实时性差.无法令人惬意. 端端Clouduolc,一款纯p2p方式的文件实时 ...
- C# 客服端上传文件与服务器器端接收 (简单代码)
简单代码: /*服务器端接收写入 可以实现断点续传*/ public string ConnectUpload(string newfilename,string filepath,byte[] fi ...
- 文件同步服务器,iis 集群 ,代码同步(一)
文件同步服务器 BitTorrent Sync 有点像TeamViewer远程协助 软件,私钥连接. 使用版本就30 天,最近测试了,功能不够理想.有点遗憾,我觉得我可以写一个! 确实很好用.
- Redis:安装、配置、操作和简单代码实例(C语言Client端)
Redis:安装.配置.操作和简单代码实例(C语言Client端) - hj19870806的专栏 - 博客频道 - CSDN.NET Redis:安装.配置.操作和简单代码实例(C语言Client端 ...
- 远程文件同步详解(Remote File Sync)
1. 远程文件同步的常见方式: 1.cron + rsync 优点: 简单 缺点:定时执行,实时性比较差:另外,rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输.如果文件数量达到了百万甚 ...
- inotify 与 rsync文件同步实现与问题
首先分别介绍inotify 与 rsync的使用,然后用两者实现实时文件同步,最后说一下这样的系统存在什么样的问题. 1. inotify 这个具体使用网上很多,参考 inotify-tools 命令 ...
- 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理
服务器文档下载zip格式 刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...
随机推荐
- java IO类简单介绍
一.流的概念 流是字节序列的抽象概念.流和文件的差别:文件是数据的静态存储形式,而流是指数据传输时的形态.文件只是流的操作对象之一.流按其操作的对象不同可以分为文件流.网络流.内存流.磁带流等.Jav ...
- 使用virtualBox安装CentOS 6.3的详细步骤
由于前几天把系统升级到win7了,原先安装的Linux虚拟机都不存在了.基于学习,这次安装选择的是CentOS 6.3版本. 下面就看看具体的安装步骤: 名称可以随便填写,类型选择Linux,版本选择 ...
- 基于RFID恢复信号场
学习RFID的核心是什么?难处在哪?:https://www.zhihu.com/question/26799106
- C#中的异步调用及异步设计模式(三)——基于事件的异步模式
四.基于事件的异步模式(设计层面) 基于事件的C#异步编程模式是比IAsyncResult模式更高级的一种异步编程模式,也被用在更多的场合.该异步模式具有以下优点: · ...
- 基于 Web 的数据挖掘--自动抽取用 HTML、XML 和 Java 编写的信息
简介: 不可否认,万维网是到目前为止世界上最丰富和最密集的信息来源.但是,它的结构使它很难用系统的方法来利用信息.本文描述的方法和工具将使那些熟悉 Web 最常用技术的开发人员能快速而便捷地获取他们所 ...
- delphi中的sql语句中空格问题
sql语句中的冒号 ‘’,在delphi中需要用四个冒号表示 ‘’‘’,delphi中的两个冒号只代表一个冒号
- C# 字符,字符串和文本处理。
1. 字符: 在.net中 字符是表示成16为Unicode代码值.每个字符都是System.Char结构(一个值类型)的实例. public class StringTempte { public ...
- Arduino I2C + 温湿度传感器Si7021
Si7021是Silicon Labs生产的温湿度传感器芯片.其主要特性: 湿度精度:误差典型值+/-2%RH,最大值+/-3%RH(0~80%RH),出厂已校正 温度精度:误差典型值+/-0.3 ...
- ffmpeg用法小结,教你抓各大网站视频
最近受邀朋友帮忙需要抓取一段某酷电影,偶然间发现ffmpeg程序.说到此可能会有人提到you-get和youtube-dl,期间也接触了该两款程序,但是由于版权原因,该软件仅仅可以抓取前几分钟预览版, ...
- STM32 IAP+Ymodem功能实现(参考官方代码)
IAP:在线升级代码 ,通俗的讲就是通过USART,IIC,或者SPI,USB等等,方式,在程序中升级程序,一般用在远程升级,或者是在PCB板子都安装到模具之后还需要升级代码,这样我们就需要,通过IA ...