authconfig
solo 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-ac
está vinculado por defecto como /etc/pam.d/system-auth
, y las líneas include
en archivos como /etc/pam.d/sshd
o /etc/pam.d/login
siempre usarán el nombre system-auth
, nunca system-auth-ac
.
man authconfig
dice que si se modifican los enlaces simbólicos, authconfig
no 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_exec
a los archivos de configuración PAM de los servicios individuales, ya sea antes o después de las líneas include
correspondientes. Esta es la opción recomendada si desea que su pam_exec
se aplique solo con servicios específicos. (¿Realmente necesita que su pam_exec
se ejecute cuando un usuario ejecuta chfn
para actualizar su propia información de nombre/oficina/número de teléfono?)
O reemplace el enlace include
apropiado con un archivo real que tenga sus líneas pam_exec
y luego include
que se refieran al archivo *-ac
correspondiente.
Por ejemplo, si desea que su pam_exec
se ejecute con todos los servicios que usan password-auth
, puede reemplazar el /etc/pam.d/password-auth
enlace simbólico (que apunta a password-auth-ac
que 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_exec
al final de la fase de sesión. Si desea colocarlo en una fase diferente, edítelo según sus necesidades.
Вы пытаетесь достичь двух целей:
В других ответах упоминалось об использовании 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 -"
*Чтобы измерить «производительность»,вам нужно решить, что наиболее важно для вашего приложения :загрузка ЦП, количество байтов в сети, время, необходимое для выполнения сжатия и т. д. Вы можете настроить конвейер и измерить, чтобы увидеть, как меняется уровень сжатия и где в конвейер, к которому применяется сжатие, влияет на эти переменные.
Скорее всего, вы не улучшите производительность, включив сжатие более чем в одном месте конвейера.
Вы говорите 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
, вы также не указываете имя файла на этой стороне.
Вместо того, чтобы создавать файл на диске, вам нужно отправить вывод 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"