¿Cómo elevar un entorno Rsync en WSL para reflejar los cambios de PC a VPS?

Tengo un DigitalOcean VPS de Ubuntu 16.04.2 al cual normalmente hago SSH con Putty y realizo cambios allí, pero recientemente descubrí que puedo hacer un duplicado de este servidor en mi PC (Win10 home con WSL), haga los cambios aquí localmente , y luego reflejarlos (mientras SSH hacía un túnel) a través de un progtwig llamado rsync , si todo iba bien. El principal beneficio aquí es una capa principal de respaldo cómoda.

Si es posible usar rsync en la versión beta de WSL, cómo se hace desde el momento en que se instala rsync , por ejemplo, si levanto un entorno de servidor en mi WSL principal de Win10 con este código:

 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 <> /etc/apache2/apache2.conf  Options Indexes FollowSymLinks AllowOverride All Require all granted  LAMPENV systemctl restart apache2.service 

y luego localhost/site_name los sitios web de mi PC localmente con localhost/site_name , ¿cómo puedo reflejarlo con rsync en el VPS?

Hago esta pregunta principalmente para ver si lo que describí hasta ahora es suficiente, si no me pierdo nada.

En una respuesta, revise la forma que describí anteriormente como base para la acción rsync y diga si falta algo, y detalle cómo lo haría con rsync en WSL después.

Primero asegúrese de que puede conectarse a través de SSH desde la máquina remota a la local. Para este propósito, debe copiar su clave privada en el directorio /root/.ssh y tiene suficientes restricciones – sudo chmod 400 /root/.ssh/id_rsa . También puedes crear el archivo /root/.ssh/config como esto:

 $ sudo cat /root/.ssh/config Host my-localhost-name HostName 77.71.11.10 IdentityFile ~/.ssh/id_rsa User my-user-name Port 22122 

Ahora puedes usar rsync desde la máquina remota de esta manera:

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

En caso de que no tenga el archivo /root/.ssh/config , el comando debe ser:

 sudo rsync -avzp -e "ssh -i /root/.ssh/id_rsa -p 22122 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress my-user-name@77.71.11.10:/var/www// /var/www// 

Dónde:

  • -a , --archive es una forma rápida de decir que desea recursividad y desea conservar casi todo (con -H es una omisión notable). La única excepción a la equivalencia anterior es cuando se especifica –files-from, en cuyo caso -r no está implícito.

  • -v , --verbose aumenta la cantidad de información que se le proporciona durante la transferencia. Por defecto, rsync trabaja silenciosamente.

  • -z , --compress – comprime los datos del archivo durante la transferencia.

  • -p , --perms hace que rsync de recepción establezca los permisos de destino para que sean los mismos que los permisos de origen. (Vea también la opción –chmod para una manera de modificar lo que rsync considera que son los permisos de origen).

  • -e , --rsh=COMMAND permite elegir un progtwig de shell remoto alternativo para usar para la comunicación entre las copias locales y remotas de rsync …

    También puede agregar aquí opciones adicionales al comando ssh . Las opciones utilizadas en el ejemplo anterior -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null son útiles para mantener Rsync en silencio y no avisar cada vez que se conecte a un nuevo servidor.

  • --progress progreso progreso de la demostración durante la transferencia.

Una barra diagonal final en el origen cambia este comportamiento para evitar crear un nivel de directorio adicional en el destino. Puede pensar que un final / en una fuente significa “copiar el contenido de este directorio” en lugar de “copiar el directorio por nombre”, pero en ambos casos los atributos del directorio que contiene se transfieren al directorio que contiene en el destino . En otras palabras, cada uno de los siguientes comandos copia los archivos de la misma manera, incluyendo su configuración de los atributos de /dest/foo :

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

Fuentes:

  • man rsync
  • Documentación de Ubuntu: SSH / OpenSSH / Keys
  • Cómo copiar archivos con Rsync sobre SSH