gzip сжимает локальную папку и извлекает ее на удаленный сервер

authconfigsolo cambiará la configuración de PAM en los archivos /etc/pam.d/*-ac. Esos archivos no se incluyen directamente en la configuración de los servicios individuales, sino a través de un enlace simbólico. Por ejemplo, /etc/pam.d/system-auth-acestá vinculado por defecto como /etc/pam.d/system-auth, y las líneas includeen archivos como /etc/pam.d/sshdo /etc/pam.d/loginsiempre usarán el nombre system-auth, nunca system-auth-ac.

man authconfigdice que si se modifican los enlaces simbólicos, authconfigno los volverá a enlazar -. Así que este es un lugar donde los administradores del sistema pueden inyectar su propia configuración.

Tienes dos opciones:

  • Agregue su pam_execa los archivos de configuración PAM de los servicios individuales, ya sea antes o después de las líneas includecorrespondientes. Esta es la opción recomendada si desea que su pam_execse aplique solo con servicios específicos. (¿Realmente necesita que su pam_execse ejecute cuando un usuario ejecuta chfnpara actualizar su propia información de nombre/oficina/número de teléfono?)

  • O reemplace el enlace includeapropiado con un archivo real que tenga sus líneas pam_execy luego includeque se refieran al archivo *-accorrespondiente.

Por ejemplo, si desea que su pam_execse ejecute con todos los servicios que usan password-auth, puede reemplazar el /etc/pam.d/password-authenlace simbólico (que apunta a password-auth-acque es modificado porauthconfig)con un archivo como este:

auth include password-auth-ac
account include password-auth-ac
password include password-auth-ac
session include password-auth-ac
session required pam_exec.so <your parameters>

...suponiendo que desea su pam_execal final de la fase de sesión. Si desea colocarlo en una fase diferente, edítelo según sus necesidades.

3
07.07.2019, 17:32
3 ответа

Вы пытаетесь достичь двух целей:

  1. Скопируйте дерево каталогов на удаленный сайт
  2. Сжатие передаваемых данных

В других ответах упоминалось об использовании rsync, который может достичь обеих целей (, предоставляя параметр «-z» для rsync, который включает сжатие ).

tar — хороший инструмент для достижения цели #1, а с параметрами командной строки (, такими как флаг «z», указанный в других ответах ), он также может достичь цели #2.

Соединение SSH само по себе также может быть использовано для достижения вашей цели сжатия. SSH имеет параметр сжатия, который по умолчанию отключен, но его можно включить в командной строке или в файле конфигурации ssh _(, см.https://linux.die.net/man/5/ssh_config). SSH версии 2 с включенным сжатием эквивалентен уровню сжатия, который вы получите при сжатии «gzip -6».

Преимущество объединения всех этих параметров в том, что вы можете настроить конвейер для получения наилучших результатов. Вам придется поэкспериментировать, чтобы увидеть, что дает лучшую производительность *:: включение сжатия в соединении SSH или включение сжатия на уровне tar/rsync.

Tar может использовать различные параметры сжатия (gzip, bzip2, lzma и т. д. ), а использование параметра « -z» с rsync активирует сжатие gzip. Вы также можете добавить отдельную программу сжатия/распаковки на оба конца конвейера для настройки уровней сжатия; вот пример добавления сжатия bzip2 при явном отключении сжатия в соединении SSH:

tar cf - ~/Documents/projects/myproject/dist/ | bzip2 -c -9 | ssh -o Compression=no root@13.21.13.12 "bunzip2 -c | tar -C ~/public_html/ -xf -"

*Чтобы измерить «производительность»,вам нужно решить, что наиболее важно для вашего приложения :загрузка ЦП, количество байтов в сети, время, необходимое для выполнения сжатия и т. д. Вы можете настроить конвейер и измерить, чтобы увидеть, как меняется уровень сжатия и где в конвейер, к которому применяется сжатие, влияет на эти переменные.

Скорее всего, вы не улучшите производительность, включив сжатие более чем в одном месте конвейера.

1
27.01.2020, 21:08

Вы говорите tarзаписать архив в файл dist.tar. С помощью этой команды вы не отправляете архив на удаленную машину.

Вы должны заставить tarзаписать свой вывод в stdoutс помощью -f -. Дефис означает stdout. Если вы добавите опцию -z, то tar будет сжимать tar-архив перед его записью в stdout, что является хорошей идеей в 99% всех случаев использования -, когда кто-то отправляет tar-архив на удаленную машину.

На удаленной стороне вы извлекаете с помощью tar -x. В вашем примере у вас есть опция -zтолько на удаленной стороне. Это не имеет смысла. Вы должны выбрать один и тот же метод сжатия с обеих сторон, т. е. использовать -zс обеих сторон или не использовать его с обеих сторон.

Это может вам подойти

tar -czf - ~/Documents/projects/myproject/dist/ | ssh root@13.21.13.12 "tar -C ~/public_html/ -xzf -"

(Отказ от ответственности :Я не пробовал. Он может содержать ошибки.)

Так как удаленный tarдолжен читать архив из stdin, вы также не указываете имя файла на этой стороне.

2
27.01.2020, 21:08

Вместо того, чтобы создавать файл на диске, вам нужно отправить вывод tarв STDOUT, чтобы затем его можно было отправить по сети с помощью ssh:

$ tar -zcf - /path/to/files | ssh user@host "tar -zx - -C /path/to/destination"

Обратите внимание на символы « -» там, где вы используете имена файлов. Они сообщают tar на стороне отправки, что нужно писать в STDOUT, а на стороне получателя — читать из STDIN. Архивные данные никогда не записываются на локальный диск.

Вы не можете указать путь при входе в систему с помощью ssh (по крайней мере, я так и не понял, как ), поэтому вам нужно указать tarна принимающей стороне, куда писать его вывод -вот для чего -C /path/to/destination.

В том виде, в котором она написана в настоящее время, команда приведет к тому, что файлы будут записываться на удаленной стороне, вложенные в локальные каталоги -, в итоге вы получите

/path/to/files/index.html --> /path/to/destination/path/to/files/index.html

Если вместо этого вы хотите /path/to/destination/index.html, скажите это:

$ tar -zcf - -C /path/to/files. | ssh user@host "tar -zx - -C /path/to/destination"
3
27.01.2020, 21:08

Теги

Похожие вопросы