web-dev-qa-db-fra.com

Saisie d'un mot de passe sur un script pour que rsync se connecte à un serveur distant afin de terminer rsync

J'essaie de créer un fichier .sh qu'une tâche cron exécutera occasionnellement et qui effectue une synchronisation automatique. Voici à quoi ressemble mon fichier:

#!/bin/bash

subdir=`hostname`

rsync -ah -e 'ssh -p 48180' /home/user/test 
[email protected]:/var/www/html/xgplayer/events/"$subdir" -y

C'est une commande, il a fallu la couper en deux parce que c'était trop long pour une ligne.

Je l’ai paramétré pour créer un sous-répertoire basé sur le nom d’hôte de la machine (merci de me dire si cela semble bon aussi, je me base sur ce code utilisé à une fin légèrement différente) auquel cet utilisateur a accès. (Je viens d'appeler l'utilisateur utilisateur pour des raisons, ignorez cela)

Ma question est la suivante: est-ce que cela va permettre de automatiquement stocker une clé SSH comme si j'essayais de la faire? Aussi, comment puis-je le faire entrer automatiquement un mot de passe via la commande que je tente d'exécuter dans le SSH quand il essaie de se connecter en tant que cet utilisateur pour rsync les fichiers? Je pensais qu'il y avait quelque chose comme - qui pourrait faire ça. Toute aide serait appréciée :)

J'utilise Ubuntu Server 16.04 LTS sur les deux machines si cela peut aider.

Edit: Ne soyez pas très délicat, mais quelle que soit la solution, vous devez également pouvoir l'insérer dans un fichier .sh et le faire fonctionner sans la saisie de l'utilisateur. C'est une tâche très spécifique, désolé.

Edit 2: Faire ceci à la demande de quelqu'un qui m'aide, donc, je ne peux malheureusement pas fournir de captures d'écran, mais il demande un mot de passe pour un utilisateur le 10.3.10.110 à chaque fois que j'exécute la commande rsync que j'ai listée, et chaque fois que je lance ssh-keygen sur un nouveau client essayant de générer une clé pour cet utilisateur sur cette machine. L'application que j'essaie d'utiliser pour cela nécessite que cela soit complètement automatisé, ce qui explique pourquoi c'est un problème.

Edit 2.5: Une fois que j’ai exécuté keygen et ssh-copy-id, il n’est plus demandé de mot de passe sous rsync, mais cela va être implémenté sur de nombreuses machines. Pour ce projet, cela ne me dérange pas de les insérer dans certains type de fichier .sh de configuration, mais ces commandes nécessitent des entrées qui devraient être automatisées pour que je puisse les utiliser dans mon cas particulier.

Edit 3: Je commente beaucoup parce que je n'ai pas assez de représentants pour discuter directement avec les personnes qui essaient de m'aider, qui sont encore nouvelles sur ce site.

1
tommy61157

J'ai trouvé ma propre réponse en creusant un peu plus, je vais vous expliquer comment cela peut être complètement automatisé avec quelques liens utiles qui m'ont aidé à arriver à ceci:

#!/bin/bash


subdir=`hostname`

rsync -ah -e 'sshpass -p "password" ssh -p 48180 -o 
StrictHostKeyChecking=no' /var/www/html/xgplayer/events 
[email protected]:/var/www/html/xgplayer/events/"$subdir" 

Cette commande Rsync est une seule commande. Les liens qui ont aidé:

https://unix.stackexchange.com/questions/33271/how-to-avoid-ssh-asking-permissionhttps://unix.stackexchange.com/questions/111526/ rsync-sans-invite-pour-mot-de-passe (La deuxième réponse, plus votée, s'est avérée plus utile que la "meilleure" réponse)

Aussi, évidemment, échangez utilisateur et mot de passe avec votre utilisateur et mot de passe, le cas échéant, ne les publiez pas ici évidemment.

Merci à tous ceux qui ont essayé d’aider, la plupart du temps, vous m'avez aidé à me guider dans la bonne direction! :)

1
tommy61157

Utilisez l'option: --password-file=rsync_pass

rsync -ah -e 'ssh -p 48180' --password-file=rsync_pass /home/user/test [email protected]:/var/www/html/xgplayer/events/"$subdir" -y

Le fichier rsync_pass contient le mot de passe de l'utilisateur.

1
MatsK