Можно ли два раза синхронизировать несколько компьютеров (т. е. конкретные каталоги в домашней папке) с помощью Unison? Если нет, есть ли альтернатива, которая может это сделать? Я не полностью против открытия Unison все время и выполняет синхронизацию вручную, но когда он открывается, вы должны выбрать профиль, который соответствует только одному каталогу, поэтому вам нужно синхронизировать каждый отдельно. Добавьте к этому IP-адрес динамический и, следовательно, его нужно отредактировать. Это довольно утомительно, и кажется, что должен быть более простой способ. Я что-то упускаю? Есть ли способ упростить этот процесс (возможно, скрипт bash)?
В локальной сети у вас есть две машины, на которых вы хотите безопасно и автоматически синхронизировать /home/<username>/Desktop каждые 10 минут: «Хост», который запускает ваш сервер OpenSSH и «Клиент», который подключается через SSH к «Host».
См. Настройка SFTP-сервера для установки сервера OpenSSH, который прослушивает соединения SSH как <username> на хосте, использует статический IP-адрес, стандартный порт, отказывается от подключений на основе пароля и разрешает соединения с RSA-ключами, если хост имеет общедоступную RSA-сеть.
На обеих машинах запустите (unison-gtk это GUI, если вы этого хотите):
sudo apt-get install unison unison-gtk
cron не имеет той же ОКРУЖНОСТИ, что и <username>, и, таким образом, не сможет найти клиентский RSA ключ, необходимый для подключения к хосту. Скрипт 1 обеспечивает, чтобы файл crontab <username> был добавлен в <username>.
Сценарий 1 также генерирует скрипт 2, который выполняется с помощью crontab файла <username> каждые 10 минут и запускает Unison.
Настройка сервера OpenSSH на хосте#!/bin/sh
SSH_ENV=$HOME/.ssh/environment_for_cron ## file to be generated
SSH_ENV2=$HOME/Documents/Scripts/unison_sync.sh ## Script 2 to be generated
function start_agent {
echo "Initialising new SSH agent..."
env | grep SSH | sed 's/SSH_AUTH_SOCK=//' > ${SSH_ENV} ## send output of env | grep SSH minus "SSH_AUTH_SOCK=" so cron can get output from SSH_ENV
## create a new script with three lines, line 3 is unison command
echo "#!/bin/sh" > ${SSH_ENV2} ## line 1
env | grep SSH >> ${SSH_ENV2} ## line 2
echo "/usr/bin/unison /home/<username>/Desktop ssh://<Host's local IP address>:<Host's listening SSH Port>//home/<username>/Desktop -batch -debug update+ -ignore 'Name *.gvfs' -ignore 'Name .cache*' -ignore 'Name [Cc]ache*' -ignore 'Name .thumbnails*' -ignore 'Name [Tt]rash*' -ignore 'Name *.backup*' -ignore 'Name *~' -ignore 'Name .dropbox*' -ignore 'Name /proc/*' -ignore 'Name /sys/*' -ignore 'Name /dev/*' -ignore 'Name /run/*' -ignore 'Name /root/Ubuntu One/*'" >> ${SSH_ENV2} ## line 3
echo succeeded
chmod 644 ${SSH_ENV} ## change permissions so cron can read SSH_ENV
chmod 775 ${SSH_ENV2} ## change permissions so cron can execute SSH_ENV2
. ${SSH_ENV} > /dev/null
ssh-add id_rsa ## unlocks your RSA key and loads it into the ssh-agent which holds keys in memory throughout login session
}
if [ -f "${SSH_ENV}" ]; then
. ${SSH_ENV} > /dev/null
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi
crontab -e
Теперь добавьте следующие строки в <username> crontab
SSH_AUTH_SOCK=/home/<username>/.ssh/environment_for_cron
*/10 * * * * /home/<username>/Documents/Scripts/unison_sync.sh
Убедитесь, что есть новая строка, следующая за двумя строками выше в новом кронтаб! Выход с Ctrl + x; y для «ДА»; Введите для подтверждения. Проверьте файл crontab:
crontab -l
Используйте Dash> Startup Applications (или Applications> System Tools> Preferences на Gnome), чтобы добавить новую программу запуска. Где это написано «Command:», введите:
/home/<username>/Documents/Scripts/set_ssh_env_for_cron_unison.sh
Если все пойдет хорошо, вы введете пароль для ключа RSA клиента после входа в систему, и вы не будете необходимо ввести пароль еще раз во время сеанса входа в систему. Каждые 10 минут клиент автоматически согласовывает соединение SSH без пароля с Host и Unison будет синхронизировать /home/<username>/Desktop и //HOST//home/<username>/Desktop. Теперь ваш ноутбук и рабочий стол могут быть объединены в святую синхронизацию.
Моя последняя настройка связывается как <username> (не root) с использованием нестандартного SSH-порта на «Host» при статическом IP. Аутентификация пароля отключена на «Хосте» (требуется предварительно аутентифицированный ключ RSA), в то время как мой ключ RSA на «Клиенте» требует пароль для использования (один раз за сеанс входа в систему). Таким образом, злоумышленнику необходимо угадать правильный порт, ключ RSA и пароль, чтобы создать оболочку как <username> с «Host».
После этой одной записи пароля в сеансе входа в систему «Клиент» и «Клиент», Host "синхронизируются автоматически каждые 10 минут. Это был метод, который я нашел, будет работать с помощью ключа RSA <username> и ОКРУЖЕНИЯ cron. **
CAVEAT! Конечно, если одна или обе машины находятся в автономном режиме, выключения и т. Д., Они не синхронизируются!
** Пожалуйста, не стесняйтесь сообщать нам, есть ли более простой метод с использованием ключа RSA на root на Клиенте, который не требует пароля для использования, в то время как Host одновременно отказывается от SSH-соединений на основе пароля.