前言

以前写代码的时候,大多数时候是本地环境开发,然后统一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来执行脚本文件

  1. @echo off
  2. cd E:\工具\winscp553
  3. e:
  4. winscp /script=C:\Users\Leestar\Desktop\script
  5. rem pause

2、写WinSCP的脚本文件

  1. open ftp://username:password@address -passive
  2. put D:\test\test.php /wwwroot/test/test.php
  3. exit
  4. #synchronize remote D:\test /wwwroot/test
  5. #put -neweronly D:\D:\test /wwwroot/test
  6. #低版本没有neweronly,注意下载最新版本

3、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

使用WinSCP进行简单代码文件同步的更多相关文章

  1. 公司和家里代码文件同步方案: (git和dropbox实现)

    公司和家里代码文件同步方案: (git和dropbox实现) 参与公司福利购入了有补贴的macbook pro后, 就不用上下班背着电脑了. 但是也出现了另外一问题: 家里和公司代码同步的问题 公司有 ...

  2. Linux下简单粗暴使用rsync实现文件同步备份【转】

    这篇来说说如何安全的备份,还有一点不同的是上一篇是备份服务器拉取数据,这里要讲的是主服务器如何推送数据实现备份. 一.备份服务器配置rsync文件 vim /etc/rsyncd.conf #工作中指 ...

  3. 云server之间实时文件同步和文件备份的最简单高效的免费方案

     分布于不同云计算中心的多台云server,通常须要进行文件同步.以满足业务的须要. 传统的文件同步方案,部署繁琐.同步实时性差.无法令人惬意. 端端Clouduolc,一款纯p2p方式的文件实时 ...

  4. C# 客服端上传文件与服务器器端接收 (简单代码)

    简单代码: /*服务器端接收写入 可以实现断点续传*/ public string ConnectUpload(string newfilename,string filepath,byte[] fi ...

  5. 文件同步服务器,iis 集群 ,代码同步(一)

    文件同步服务器 BitTorrent Sync 有点像TeamViewer远程协助 软件,私钥连接. 使用版本就30 天,最近测试了,功能不够理想.有点遗憾,我觉得我可以写一个! 确实很好用.

  6. Redis:安装、配置、操作和简单代码实例(C语言Client端)

    Redis:安装.配置.操作和简单代码实例(C语言Client端) - hj19870806的专栏 - 博客频道 - CSDN.NET Redis:安装.配置.操作和简单代码实例(C语言Client端 ...

  7. 远程文件同步详解(Remote File Sync)

    1. 远程文件同步的常见方式: 1.cron + rsync 优点: 简单 缺点:定时执行,实时性比较差:另外,rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输.如果文件数量达到了百万甚 ...

  8. inotify 与 rsync文件同步实现与问题

    首先分别介绍inotify 与 rsync的使用,然后用两者实现实时文件同步,最后说一下这样的系统存在什么样的问题. 1. inotify 这个具体使用网上很多,参考 inotify-tools 命令 ...

  9. 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理

    服务器文档下载zip格式   刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...

随机推荐

  1. RollingFileAppender

    http://logback.qos.ch/manual/appenders.html#RollingFileAppender 1.基于时间的滚动策略 TimeBasedRollingPolicy 就 ...

  2. 编写高质量代码改善C#程序的157个建议——建议122:以<Company>.<Component>为命名空间命名

    建议122:以<Company>.<Component>为命名空间命名 建议以<Company>.<Component>为程序集命名,比如Microso ...

  3. Find out your Java heap memory size

    In this article, we will show you how to use the -XX:+PrintFlagsFinal to find out your heap size det ...

  4. ComponentSpace SAML v2.0 for .NET 使用介绍

    下载地址:http://samlsso.codeplex.com/ 以下描叙参考版本为其官网最新版本2.5.0.6.相对2.4版本,2.5有了很大改进,很多接口方法都变了.使用起来更方便,易懂. 广告 ...

  5. android多lib库工程的自动批量构建--编写ant脚本

    基本配置--build.properties 首先编写基本配置build.properties ,主要配置如下: android sdk所在目录 编译项目所使用的项目版本 Jdk所在目录 以及签名时, ...

  6. Mac上修改MySQL默认字符集为utf8

    1.检查默认安装的mysql的字符集 mysql> show variables like '%char%'; +--------------------------+------------- ...

  7. Linux daemon与service 学习笔记

    service 常驻在内存中的进程,且可以提供一些系统或网络功能,就是服务.   daemon service的提供需要进程的运行,所以实现service的程序我们称为daemon.   eg: 实现 ...

  8. linux 扩展权限

    默认权限     每一个终端都拥有一个umask属性,来确定新建文件,文件夹的默认权限 umask使用数字权限方式表示,如:022 新建目录的默认权限是:777-umask; 新建文件的默认权限是:6 ...

  9. 曲苑杂坛--查看CPU配置

    ​--===================================================--查看CPU配置SELECT cpu_count AS [Logical CPU Coun ...

  10. documeant 学习总结(二)

    (一)移除节点及属性     /**移除节点和属性的操作     * @throws DocumentException     */    public void RemoveOperator()  ...