虽然 Visual Studio 和 IIS 有一个 Web Deploy 可以进行 Publish 操作。但这个 publish 实在太不科学了。比如当换一台机器,从 git/svn checkout 代码,修改了上传,这时会进行“整站”覆盖操作;其次,之后每次 publish 之后你会发现很多根本没改动过的 dll 也会一样上传。真是奇 dumb 无比。

上一篇 BLOG 介绍了 Cygwin 设立 sshd 服务,现在我们可以在本地机上通过 ssh 连接到我们的Server。配合 rsync 这个牛逼无比的工具。发布不再蛋疼。

首先,要在Server和本地机上都安装好 rsync 。完成后,我们在本地 cygwin 运行以下命令就O了:

1
rsync -vrcz --progress -e ssh --delete /path/to/source/ [email protected]:/path/to/server/target

参数说明

  • v  详细输出
  • r  递归
  • c  使用 checksum 对比文件,关键就是这里,按文件内容生成 checksum 相当就跳过
  • z  使用压缩,两机传输的时候使用压缩
  • –progress  按每个文件显示传输进度
  • -e ssh 这个很重要,指定利用 ssh 进行传输
  • –delete 删除Server上本地没有的文件
  • 接下来两个参数,左边一个是来源,右边就是目标了。[email protected]的形式就跟 ssh 一样,很好理解。:号后面跟的就是Server上面的文件目标。PS:路径后面带/指定是这个目录下的文件及目录同步过去,如果没有/就是文件夹本身被同步过去。 另外也可以设立 rsync daemon 的模式,不用 ssh 进行同步。只不过 windows 下 rsync daemon 只能绑定到特定用户,而且另外开一个 873 端口。考虑到防火墙和灵活性的问题,rsync + ssh 显然是最灵活的。

当我们需要从镜像或者备份Server上面拉取的时候也很方便,直接把来源和目标换一下就可以了。*nix 万岁!

每次输入密码总是不科学的。下面顺便提一下如何使用密钥自动登录

  1. 进入Server~目录建立.ssh目录:
1
2
3
4
ssh [email protected]
cd ~
mkdir .ssh
exit
  1. 回到本机,进行~目录生成密钥对
1
2
ssh-keygen -t rsa
#连按3个回车在 .ssh 里面生成 id_rsa 密钥和 id_rsa.pub
  1. 复制公钥到Server
1
2
cat .ssh/id_rsa.pub | ssh [email protected] 'cat >> .ssh/authorized_keys'
#输出本地的公钥内容,然后桥接到 ssh server 上面的 cat 命令,它会把接收到的内容作为新行放到 .ssh/authorized_keys 文件中
  1. 现在退出,再登录 [email protected] 就不需要输入密码了。原理上基本就是 ssh 会将两端的~目录下面的密钥和公钥进行配对,成功证明是本人。相比每次输入密码,除了省事外也更安全。