使用WinSCP进行简单代码文件同步

前言

之前写代码的时候,大多数时候是本地环境开发,而后统一FTP拖拽上传,因此通常来讲本地查看修改效果便可。后来项目变大,文件愈来愈多,项目分工合做,整合项目配置本地环境就变得很是复杂了,而且团队代码不能实时同步更新,因此通常来讲会采用线上测试服务器,进行统一的测试开发。那么修改代码以后的手动上传,就成了很是耗时的事情,文件夹切换来切换去拖拽,有时候本身都晕了,因此自动化的脚本部署必不可少,不光是开发的时候使用,服务器上线以后的分布式服务器部署也有用,经过git的代码提交钩子等,咱们能够完成整个代码部署的自动化。php

尝试的过程当中遇到挺多坑,记录总结一下,先从协议开始。linux

传输协议

FTP

FTP(File Transfer Protocol):是TCP/IP网络上两台计算机传送文件的协议,FTP是在TCP/IP网络和INTERNET上最先使用的协议之一,它属于网络协议组的应用层。FTP客户机能够给服务器发出命令来下载文件,上载文件,建立或改变服务器上的目录。相比于HTTP,FTP协议要复杂得多。复杂的缘由,是由于FTP协议要用到两个TCP链接,一个是命令链路,用来在FTP客户端与服务器之间传递命令;另外一个是数据链路,用来上传或下载数据。FTP是基于TCP协议的,所以iptables防火墙设置中只须要放开指定端口(21 + PASV端口范围)的TCP协议便可。 git

FTP的PORT(主动模式)和PASV(被动模式)
PORT中文称为主动模式,工做的原理: FTP客户端链接到FTP服务器的21端口,发送用户名和密码登陆,登陆成功后要list列表或者读取数据时,客户端随机开放一个端口(1024以上),发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,经过服务器的20端口和客户端开放的端口链接,发送数据,原理以下图:

PASV是Passive的缩写,中文成为被动模式,工做原理:FTP客户端链接到FTP服务器的21端口,发送用户名和密码登陆,登陆成功后要list列表或者读取数据时,发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上),而后把开放的端口告诉客户端, 客户端再链接到服务器开放的端口进行数据传输,原理以下图:
github

FTPS

即FTP借助SSL协议加密传输,不但要用FTP服务器还要用SSL协议加密。web

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模式!!这就很是尴尬了…ssh

PuTTY

PuTTY 提供了两个文件传输工具,PSCP (PuTTY Secure Copy client)和PSFTP (PuTTY SFTP client)
PSCP 经过 SSH 链接,在两台机器之间安全的传输文件,能够用于任何 SSH(包括 SSH v一、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
一、写个.bat文件让WinSCP来执行脚本文件

 
 
 
 
@echo offcd E:\工\winscp553e:winscp /script=C:\Users\Leestar\Desktop\scriptrem pause

二、写WinSCP的脚本文件

 
 
 
 
open ftp://username:password@address -passiveput D:\test\test.php /wwwroot/test/test.phpexit#synchronize remote D:\test /wwwroot/test#put -neweronly D:\D:\test /wwwroot/test#低版本没有neweronly,注意下载最新版本

三、cmd运行.bat进行同步。

总结

经过WinSCP,咱们实现了简单的代码文件同步,释放双手,节约了部署时间,基于此咱们还可以定制项目的部署方案。
学习过程当中还发现了一个好东西——Walle
Walle 一个web部署系统工具,配置简单、功能完善、界面流畅、开箱即用!支持git、svn版本管理,支持各类web代码发布,PHP,Python,JAVA等代码的发布、回滚,能够经过web来一键完成。
原理图以下:

备注

Telnet

  1. Telnet是电信(Telecommunications)和网络(Networks)的联合缩写,这是一种在UNIX平台上最为人所熟知的网络协议。
  2. Telnet使用端口23,它是专门为局域网设计的。
  3. Telnet不是一种安全通讯协议,由于它并不使用任何安全机制,经过网络/互联网传输明文格式的数据,包括密码,因此谁都能嗅探数据包,得到这个重要信息。
  4. Telnet中没有使用任何验证策略及数据加密方法,于是带来了巨大的安全威胁,这就是为何telnet再也不用于经过公共网络访问网络设备和服务器。
  5. 在Linux系统上,telnet很容易使用yum来安装:

SSH

  1. SSH表明安全外壳(Secure Shell),它如今是经过互联网访问网络设备和服务器的惟一的主要协议。
  2. SSH默认状况下经过端口22运行;不过,很容易更改这个端口。
  3. SSH是一种很是安全的协议,由于它共享并发送通过加密的信息,从而为经过互联网等不安全的网络访问的数据提供了机密性和安全性。
  4. 一旦通信的数据使用SSH通过加密,就极难解压和读取该数据,因此咱们的密码在公共网络上传输也变得很安全。
  5. SSH还使用公钥用于对访问服务器的用户验证身份,这是一种很好的作法,为咱们提供了极高的安全性。
  6. 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

相关文章
相关标签/搜索