如何在 WSL 上建立 Rsync 环境以将更改从 PC 镜像到 VPS?

如何在 WSL 上建立 Rsync 环境以将更改从 PC 镜像到 VPS?

我有一个 Ubuntu 16.04.2 DigitalOcean VPS,我通常使用 Putty 通过 SSH 连接它并在其中进行更改,但最近我发现我可以在我的 PC(带有 WSL 的 Win10 家庭版)中复制此服务器,在本地进行更改,然后通过名为 的程序镜像它们(在 SSH 隧道中)rsync,如果一切顺利的话。这里的主要好处是舒适的主要备份层。

如果可以在 WSL beta 版中使用 rsync,那么从rsync安装那一刻起该如何操作呢,例如,如果我使用以下代码在我的 Win10 家庭版 WSL 上建立服务器环境:

apt-get update -y && apt-get upgrade -y
apt-get install tree zip unzip make php-zip php-curl php-xml php-gd
apt-get install fail2ban
apt-get install lamp-server^ -y
a2enmod rewrite
sed -i 's/post_max_size \= .M/post_max_size \= 200M/g' /etc/php/7.0/apache2/php.ini # regex dot instead of 2 or 8.
sed -i 's/upload_max_filesize \= .M/upload_max_filesize \= 200M/g' /etc/php/7.0/apache2/php.ini

cat <<-'LAMPENV' >> /etc/apache2/apache2.conf

<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
LAMPENV

systemctl restart apache2.service

然后我使用 在我的 PC 上本地打开网站localhost/site_name,如何将其镜像rsync到 VPS 上?

我问这个问题主要是为了看看我到目前为止所描述的是否足够 - 以及我是否没有遗漏任何东西。

在回答中,请回顾我上面描述的方式作为操作的基础rsync,并说出是否缺少了什么,然后详细说明你rsync随后如何在 WSL 中执行此操作。

答案1

首先确保您能够通过 SSH 从远程计算机连接到本地计算机。为此,您必须将您的私钥复制到目录中,/root/.ssh并且它具有足够的限制 - sudo chmod 400 /root/.ssh/id_rsa。您还可以创建/root/.ssh/config如下文件:

$ sudo cat /root/.ssh/config

Host my-localhost-name
    HostName 77.71.11.10
    IdentityFile ~/.ssh/id_rsa
    User my-user-name
    Port 22122

现在您可以rsync通过以下方式从远程机器使用:

sudo rsync -avzp -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress my-localhost-name:/var/www/<my-folder>/ /var/www/<my-folder>/

如果您没有/root/.ssh/config文件,命令应该是:

sudo rsync -avzp -e "ssh -i /root/.ssh/id_rsa -p 22122 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress [email protected]:/var/www/<my-folder>/ /var/www/<my-folder>/

在哪里:

  • -a--archive是快速表示您想要递归并希望保留几乎所有内容(-H 是一个明显的遗漏)的方式。上述等价关系的唯一例外是指定 --files-from 时,在这种情况下不隐含 -r。

  • -v--verbose增加了传输过程中提供的信息量。默认情况下,rsync 会默默工作。

  • -z, --compress--在传输过程中压缩文件数据。

  • -p--perms导致接收 rsync 将目标权限设置为与源权限相同。 (另请参阅 --chmod 选项以了解修改 rsync 认为是源权限的方法。)

  • -e--rsh=COMMAND允许您选择另一个远程 shell 程序用于 rsync 的本地和远程副本之间的通信......

    您还可以在此处向ssh命令添加其他选项。上例中使用的选项-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null有助于保持 Rsync 安静,并且不会在您每次连接到新服务器时提示。

  • --progress显示传输过程中的进度。

源上的尾部斜杠会改变此行为,以避免在目标上创建额外的目录级别。您可以将/源上的尾部斜杠视为“复制此目录的内容”,而不是“按名称复制目录”,但在这两种情况下,包含目录的属性都会转移到目标上的包含目录。换句话说,以下每个命令都以相同的方式复制文件,包括它们的属性设置 /dest/foo

rsync -av /src/foo /dest
rsync -av /src/foo/ /dest/foo

资料来源:

相关内容