07 августа 2017

Zimbra - перенос почтовых ящиков

Столкнулся с задачей - необходимо перенести один из доменов на другой хост, думаю ок. Погуглил, нашел стандартные костыли типа zmmboxmove, думаю о как круто, все из коробки, но оказывается данное решение есть только в платной версии. Начал смотреть дальше, нашел миграцию с помощью встроенного механизма, но там теряются пароли пользователей, что минус, так как надо генерить новые, а это стресс для юзеров. В итоге было решено создать аналогичных пользователей или переместить с помощью встроенного механизма, а дальше перенести хеши паролей. По-быстрому решил заскриптовать, и вот что из этого вышло. Первым делом необходимо получить список аккаунтов, которые мы хотим перенести: 
mkdir /tmp/zimbra
cd /tmp/zimbra
zmprov -l gaa example.com | grep -v galsync@example.com > users.txt
Далее нам необходимо получить хеши
pass.sh
#!/bin/bash
cat users.txt | while read line
do
    array[i]="$line"
    zmprov -l ga ${array[i]} userPassword | sed s/#\ name/zmprov\ ma/ | tr '\n' ' ' | sed s/:\ /\ \'/ | sed s/\ \ /\',/ | tr ',' '\n' >> /tmp/zimbra/restore_pass.sh
    let i++
done
После этого у нас есть файл с командами, которые устанавливают старые-новые хеши.
Экспортируем ящики
export.sh
#!/bin/bash
cat users.txt | while read line
do
    array[i]="$line"
    zmmailbox -z -m ${array[i]} -t 0 getRestURL "//?fmt=tgz" > /tmp/zimbra/${array[i]}.tar.gz
    let i++
done
Устанавливаем права на каталог
chmod -R 777 /tmp/zimbra/
Cливаем все что получилось на новый сервер и начинаем импортить ящики
import.sh
#!/bin/bash
cat users.txt | while read line
do
    array[i]="$line"
    zmprov ca ${array[i]} ZmHpg0LeQSPNZE0c
    zmmailbox -z -m ${array[i]} -t 0 postRestURL "//?fmt=tgz&resolve=reset" /tmp/zimbra/${array[i]}.tar.gz
    let i++
done
В этом шаге мы создаем ящики и сразу имортим в них содержимое, ну а далее просто остается установить хеши с помощью restore_pass.sh

Комментариев нет:

Отправить комментарий