Existe-t-il un moyen de synchroniser plusieurs ordinateurs (c’est-à-dire des répertoires particuliers du dossier d’accueil) automatiquement à l’aide de Unison? Si non, y a-t-il une alternative qui peut le faire? Je ne suis pas totalement opposé à l'ouverture simultanée de Unison et à la synchronisation manuelle, mais lors de son ouverture, vous devez sélectionner un profil, qui correspond à un seul répertoire. Vous devez donc les synchroniser individuellement. Ajoutez à cela l'adresse IP est dynamique et doit donc être modifiée. C'est assez fastidieux et il semble qu'il devrait y avoir un moyen plus simple. Est-ce que je manque quelque chose? Existe-t-il un moyen de simplifier ce processus (éventuellement un script bash)?
Ma suggestion serait de résoudre le problème de l’adresse IP dynamique (la plupart des routeurs ont le concept de réservation d’adresses, que vous pouvez utiliser pour "réparer" l’adresse IP de votre ordinateur). Après cela, vous pouvez utiliser la version en ligne de commande de unison:
unison -auto -batch profilename
et vous pouvez l'ajouter à vos scripts de connexion/déconnexion ou en tant que tâche cron.
Si vous avez encore besoin de changer l'adresse IP, vous pouvez utiliser sed
dans un script:
créez un fichier modèle dans ~/.unison
, newprof.tmpl
, comme ceci:
root = /home/romano/
root = ssh://romano@MYIPHERE//home/romano/
path = education
path = research
créez le script suivant, appelez-le sync_newprof
:
#!/bin/bash
#
cd $HOME/.unison
cat newprof.tmpl | sed s/MYIPHERE/$1 >! newprof.prf
unison -auto -batch profilename
en gros, nous créons un fichier de profil modifiant le mot MYIPHERE avec le premier argument du script.
maintenant vous pouvez l'appeler comme
sync_newprof 1.1.1.1
et il va créer le profil avec l'IP donnée et sync.
Sur un réseau local, vous avez deux machines sur lesquelles vous souhaitez synchroniser automatiquement et en toute sécurité /home/<username>/Desktop
toutes les 10 minutes: "Hôte" qui exécute votre serveur OpenSSH et "Client" qui se connecte via SSH à "Hôte".
cron
puisse utiliser la clé RSA de <username>
<username>
, etVoir Setup SFTP Server pour configurer un serveur OpenSSH qui écoute les connexions SSH sous le nom <username>
sur l'hôte, utilise une adresse IP statique, écoute sur un port non standard, refuse les connexions basées sur un mot de passe et autorise les connexions de clé RSA si l'hôte possède la RSA public_key.
Sur les deux machines, exécutez (unison-gtk est une interface graphique si vous le souhaitez):
Sudo apt-get install unison unison-gtk
cron
ne partage pas le même environnement que <username>
et ne trouvera donc pas la clé client RSA nécessaire pour se connecter à l'hôte. Le script 1 fournit cet environnement au fichier crontab de <username>
.
Le script 1 génère également le script 2 qui est exécuté par le fichier crontab de <username>
toutes les 10 minutes et exécute Unison.
/home/<username>/Documents/Scripts/set_ssh_env_for_cron_unison.sh
)#!/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
<username>
pour exécuter la synchronisation toutes les 10 minutescrontab -e
Maintenant, ajoutez les lignes suivantes à la crontab de <username>
SSH_AUTH_SOCK=/home/<username>/.ssh/environment_for_cron
*/10 * * * * /home/<username>/Documents/Scripts/unison_sync.sh
Sortir avec Ctrl+x; y
pour "OUI"; Enter pour confirmation. Vérifiez le fichier crontab:
crontab -l
Utilisez Dash
> Startup Applications
(ou Applications
> System Tools
> Preferences
sur Gnome) pour ajouter un nouveau programme de démarrage. Où il est écrit "Commande:", entrez:
/home/<username>/Documents/Scripts/set_ssh_env_for_cron_unison.sh
Si tout va bien, vous entrerez le mot de passe dans la clé RSA du client lors de la connexion du client et vous ne serez pas obligé de le saisir à nouveau pendant toute la session de connexion. Toutes les 10 minutes, le Client négociera automatiquement une connexion SSH sans mot de passe avec Host et Unison synchronisera /home/<username>/Desktop
et //Host//home/<username>/Desktop
. Votre ordinateur portable et votre ordinateur de bureau peuvent maintenant être joints dans la Sainte Synchromie.
Ma configuration finale communique en tant que <username>
(et non root
) à l'aide d'un port SSH non standard vers "Héberger" sur une adresse IP statique. L'authentification par mot de passe est désactivée sur "Hôte" (nécessitant une clé RSA pré-authentifiée), tandis que ma clé RSA sur "Client" nécessite un mot de passe pour pouvoir être utilisé (une fois par session). Ainsi, un attaquant doit deviner le port, la clé RSA et le mot de passe appropriés pour créer un shell sous le nom <username>
avec "Host".
Après cette entrée de mot de passe par session de connexion, "Client" et "Hôte" se synchronisent automatiquement toutes les 10 minutes. Cette méthode fonctionnait avec la clé RSA de <username>
et l'environnement [VARIABLE] de cron
. **
CAVEAT! Bien sûr, si une ou les deux machines sont hors ligne, en arrêt, etc., elles ne seront pas synchronisées!
** S'il vous plaît, n'hésitez pas à nous faire savoir s'il existe une méthode plus simple utilisant une clé RSA appartenant à root
sur un client ne nécessitant pas de mot de passe pour être utilisé, tandis que l'hôte refuse simultanément les connexions SSH basées sur un mot de passe.