我有一个 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
资料来源: