Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

rsync et ssh

12 réponses
Avatar
Hugolino
Yo !

Ayant récemment lu ici un sujet a propos de rsync, je me suis souvenu
que j'avais dans ma TODO list de configurer la sauvegarde de mon daily
PC sur un linux qui traine sur mon réseau (Linux que je viens de doter
d'un disque de 1 To, ça doit être pour ça que j'ai eu l'idée de le
remplir de sauvegardes).

Pour l'instant, je monte le home de ce "serveur" sur mon daily et
j'envoie la commande :
rsync -axvuzs --progress --stats "${origine}" "${destination}"

("${origine}" valant "/home/hugo/" et ${destination} valant
"/mnt/Dottore/home/hugo/" (les plus motardisés d'entre vous auront
peut-être deviné que mon serveur de sauvegarde a pour adresse
192.168.1.46))

M'est venu l'idée de vouloir effectuer cette sauvegarde sans monter via
NFS le répertoire du serveur et donc taper plutôt la commande :
rsync -e "ssh -p 8222" -axvuzs --progress --stats /home/hugo/ hugo@192.168.1.46:/home/hugo/

Seulement voilà...
Après avoir saisi mon mot de passe sur le serveur ssh, j'obtiens un:
protocol version mismatch -- is your shell clean?
(see the rsync man page for an explanation)
rsync error: protocol incompatibility (code 2) at compat.c(176)
[sender=3.1.1]

Tout ça parce que le bash sur le serveur (que j'utiise pour m'y
connecter de temps à autre depuis une autre machine) a été configuré
pour afficher un prompt personnalisé avec aussi un fortune tiré des
élucubrations qui ne servent de signatures sur usenet.

Bref, même après lectures de la page man de ssh, de différents tutos sur
le net, je ne sais pas quelle option passer à ssh afin qu'il reste muet
(et donc "clean") et permette à rsync de faire son boulot.

Merci de vos avis.


--
> Ouais, bon, en même temps, je n'ai pas forcément envie de bosser dans
> l'informatique, là tout de suite. Si je n'ai jamais travaillé dans ce
> secteur, c'est qu'il y a une raison...
Bof, je te parle pas de travailler mais juste de toucher un salaire.

10 réponses

1 2
Avatar
Nicolas George
Hugolino , dans le message
, a écrit :
Tout ça parce que le bash sur le serveur (que j'utiise pour m'y
connecter de temps à autre depuis une autre machine) a été configuré
pour afficher un prompt personnalisé avec aussi un fortune tiré des
élucubrations qui ne servent de signatures sur usenet.

Il ne devrait afficher quoi que ce soit qu'en mode interactif. C'est ça
qu'il faut corriger. Le moyen le plus rapide de tester est d'utiliser
une commande du genre :
ssh true
Elle ne doit strictement rien afficher.
Avatar
Hugolino
Le 11-06-2017, Nicolas George <nicolas$ a écrit :
Hugolino , dans le message
, a écrit :
Tout ça parce que le bash sur le serveur (que j'utiise pour m'y
connecter de temps à autre depuis une autre machine) a été configuré
pour afficher un prompt personnalisé avec aussi un fortune tiré des
élucubrations qui ne servent de signatures sur usenet.

Il ne devrait afficher quoi que ce soit qu'en mode interactif. C'est
ça qu'il faut corriger.

Comment faire ?
Quelques recherches me causent du paquet sshpass mais je crois que ça va
ressembler à une usine à gaz : utiliser rsync, ssh et sshpass ensemble
me semble le moyen le plus sûr de perdre du temps à configurer tout ça.
Le moyen le plus rapide de tester est d'utiliser
une commande du genre :
ssh true
Elle ne doit strictement rien afficher.

Elle me demande le mot de passe de hugo sur 192.168.1.46 puis me
connecte en affichant une fortune et mon prompt personnalisé avant de me
déconnecter (après exécution de 'true' j'imagine).
Est-ce que le problème viendrait du fait que mon serveur ssh est
configuré pour demander un mot de passe ? (Je n'ai jamais vraiment
compris cette sombre histoire de clé).
--
Une amorce de serrage en 2T sur une décélération prolongée, moi j'appelle ça
un défaut de lubrification.

Une décélératrion prolongée sur un 2T, moi j'appelle ça de la connerie.
Hugo (né il y a 1 676 604 196 secondes)
Avatar
Nicolas George
Hugolino , dans le message
, a écrit :
Quelques recherches me causent du paquet sshpass mais je crois que ça va
ressembler à une usine à gaz : utiliser rsync, ssh et sshpass ensemble

Si tu veux éviter d'avoir à taper le mot de passe, utilise une clef et
un agent SSH, mais ça n'a rien à voir avec le problème.
Elle me demande le mot de passe de hugo sur 192.168.1.46 puis me

Le mot de passe est côté client, donc ça n'a rien à voir.
connecte en affichant une fortune et mon prompt personnalisé avant de me
déconnecter (après exécution de 'true' j'imagine).

Donc ton .bashrc est doublement buggé. Ni fortune ni prompt ne devraient
être affichés dans ces conditions.
Est-ce que le problème viendrait du fait que mon serveur ssh est
configuré pour demander un mot de passe ?

Non.
Avatar
Hugolino
Le 11-06-2017, Nicolas George <nicolas$ a écrit :
Hugolino , dans le message
, a écrit :
Quelques recherches me causent du paquet sshpass mais je crois que ça
va ressembler à une usine à gaz : utiliser rsync, ssh et sshpass
ensemble

Si tu veux éviter d'avoir à taper le mot de passe, utilise une clef
et un agent SSH, mais ça n'a rien à voir avec le problème.

0K
Elle me demande le mot de passe de hugo sur 192.168.1.46 puis me

Le mot de passe est côté client, donc ça n'a rien à voir.

Dans ton message précédent, tu me disais que "ssh
true" ne doit strictement rien afficher.
Est-il normal qu'elle affiche la demande du mot de passe ? Selon moi,
oui.
connecte en affichant une fortune et mon prompt personnalisé avant de
me déconnecter (après exécution de 'true' j'imagine).

Donc ton .bashrc est doublement buggé. Ni fortune ni prompt ne
devraient être affichés dans ces conditions.

Comment un fichier .bashrc pourrait-il être buggué ?
Voici son contenu :
8<-----------8<---------8<----------8<----------8<----------8<----------8<
# .bashrc
# User specific aliases and functions
NORMAL=""
RED=""
GREEN=""
YELLOW=""
BLUE=""
MAGENTA=""
CYAN=""
WHITE=""
# Source global definitions
# deja fait dans ~/.bash_profile
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
else
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
fi
#alias fm='echo "Installe postfix !!!!"'
PATH=$PATH":/usr/sbin/:/sbin/:/usr/local/bin:/usr/games"
export PATH
FB_MAC_ADDRESS="00:07:CB:C5:BA:66"
FB_NAME="FreeBox"
export FB_MAC_ADDRESS
export FB_NAME
pi=$(echo "scale0; 4*a(1)" | bc -l)
export pi
alias sshh="ssh -p 8222"
# Pour ftp chez free
alias ftpfree="lftp "
echo ${BLUE}
/usr/bin/linux_logo -a
echo
if test -x /usr/local/bin/FortuneLogin >/dev/null
then
/usr/local/bin/FortuneLogin
fi
cat /home/hugo/taf/Bac-selon-Paul-Valery.txt | cowsay -W 68 | lolcat -a -s 1000
echo
echo ${WHITE} " -=-=-=-=-=-=-=-"
echo ${YELLOW} "You're logged as ${CYAN}"$(whoami)" ${YELLOW}!!"
echo ${WHITE} " -=-=-=-=-=-=-=-"
echo
8<-----------8<---------8<----------8<----------8<----------8<----------8<
Seule bizarrerie, avec ton invocation de ssh, lolcat ne m'affiche pas de
couleurs...
Est-ce que le problème viendrait du fait que mon serveur ssh est
configuré pour demander un mot de passe ?

Non.

0K
--
Windows: Microsoft's tax on computer illiterates.
Hugo (né il y a 1 676 652 350 secondes)
Avatar
Francois Lafont
On 06/11/2017 09:56 PM, Hugolino wrote:
Comment un fichier .bashrc pourrait-il être buggué ?
Voici son contenu :
8<-----------8<---------8<----------8<----------8<----------8<----------8<
# .bashrc
# User specific aliases and functions
NORMAL=""
RED=""
GREEN=""
YELLOW=""
BLUE=""
MAGENTA=""
CYAN=""
WHITE=""
# Source global definitions
# deja fait dans ~/.bash_profile
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
else
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
fi
#alias fm='echo "Installe postfix !!!!"'
PATH=$PATH":/usr/sbin/:/sbin/:/usr/local/bin:/usr/games"
export PATH
FB_MAC_ADDRESS="00:07:CB:C5:BA:66"
FB_NAME="FreeBox"
export FB_MAC_ADDRESS
export FB_NAME
pi=$(echo "scale0; 4*a(1)" | bc -l)
export pi
alias sshh="ssh -p 8222"
# Pour ftp chez free
alias ftpfree="lftp "
echo ${BLUE}
/usr/bin/linux_logo -a
echo
if test -x /usr/local/bin/FortuneLogin >/dev/null
then
/usr/local/bin/FortuneLogin
fi
cat /home/hugo/taf/Bac-selon-Paul-Valery.txt | cowsay -W 68 | lolcat -a -s 1000
echo
echo ${WHITE} " -=-=-=-=-=-=-=-"
echo ${YELLOW} "You're logged as ${CYAN}"$(whoami)" ${YELLOW}!!"
echo ${WHITE} " -=-=-=-=-=-=-=-"
echo
8<-----------8<---------8<----------8<----------8<----------8<----------8<

Comme l'indique Nicolas, tous ces affichages, ça ne va pas.
Je peux te le dire d'autant plus tranquillement que j'avais
fait moi-même cette erreur. Dans mon cas, je m'en étais rendu
compte car ça me fichait en l'air des commandes scp.
Il faut que tu ajoutes une condition à ces affichages : afficher
des messages uniquement lorsque ton shell bash est interactif.
Et par conséquent, si c'est un shell non interactif, ne rien
afficher.
Ensuite, pour savoir si ton shell bash est interactif, tu peux
par exemple utiliser la variable $- : le shell est interactif
ssi la variable $- contient le caractère "i".
Du coup, perso, j'ai mis ceci dans mon .bashrc :
if printf '%sn ' "$-" | grep -q 'i'
then
# C'est un shell interactif.
# On peut afficher des messages rigolos. :p
fi
Après, il y a peut-être mieux (je suis preneur de toute remarque
constructive) mais en pratique ça semble bien marcher pour moi.
--
François Lafont
Avatar
Francois Lafont
On 06/11/2017 10:45 PM, Francois Lafont wrote:
if printf '%sn ' "$-" | grep -q 'i'

Oups, il y a un petit espace en trop. C'est :
if printf '%sn' "$-" | grep -q 'i'
--
François Lafont
Avatar
Lucas Levrel
Le 11 juin 2017, à 21:56, Hugolino a écrit :
Comment un fichier .bashrc pourrait-il être buggué ?

Comme ça :
echo ${BLUE}
/usr/bin/linux_logo -a
echo
if test -x /usr/local/bin/FortuneLogin >/dev/null
then
/usr/local/bin/FortuneLogin
fi
cat /home/hugo/taf/Bac-selon-Paul-Valery.txt | cowsay -W 68 | lolcat -a -s 1000
echo
echo ${WHITE} " -=-=-=-=-=-=-=-"
echo ${YELLOW} "You're logged as ${CYAN}"$(whoami)" ${YELLOW}!!"
echo ${WHITE} " -=-=-=-=-=-=-=-"
echo

.bashrc c'est pour configurer bash, pas pour afficher un arbre de Noël !
Tu dois tester que ton shell est interactif avant de le faire.
man bash :
PS1 is set and $- includes i if bash is interactive, allowing
a shell script or a startup file to test this state.
--
LL
Ἕν οἶδα ὅτι οὐδὲν οἶδα (Σωκράτης)
C'est mieux avé les accents (F. Patte)
Avatar
Hugolino
Le 11-06-2017, Francois Lafont a écrit :
On 06/11/2017 09:56 PM, Hugolino wrote:
Comment un fichier .bashrc pourrait-il être buggué ?
Voici son contenu :
8<-----------8<---------8<----------8<----------8<----------8<----------8<
[...]
cat /home/hugo/taf/Bac-selon-Paul-Valery.txt | cowsay -W 68 | lolcat -a -s 1000
[...]
8<-----------8<---------8<----------8<----------8<----------8<----------8<

Comme l'indique Nicolas, tous ces affichages, ça ne va pas.
Je peux te le dire d'autant plus tranquillement que j'avais fait
moi-même cette erreur. Dans mon cas, je m'en étais rendu compte car
ça me fichait en l'air des commandes scp.
Il faut que tu ajoutes une condition à ces affichages : afficher des
messages uniquement lorsque ton shell bash est interactif.
Et par conséquent, si c'est un shell non interactif, ne rien
afficher.
Ensuite, pour savoir si ton shell bash est interactif, tu peux par
exemple utiliser la variable $- : le shell est interactif ssi la
variable $- contient le caractère "i".
Du coup, perso, j'ai mis ceci dans mon .bashrc :
if printf '%sn' "$-" | grep -q 'i'
then
# C'est un shell interactif.
# On peut afficher des messages rigolos. :p
fi
Après, il y a peut-être mieux (je suis preneur de toute remarque
constructive) mais en pratique ça semble bien marcher pour moi.

C'est ce que j'ai fait, et maintenant, ça marche : je peux faire un
rsync via ssh.
Merci à toi, à NIcolas et à Lucas.
--
Windows: Microsoft's tax on computer illiterates.
Hugo (né il y a 1 676 666 928 secondes)
Avatar
Benoit Izac
Bonjour,
Le 11/06/2017 à 22:47, Francois Lafont a écrit dans le message
<593dac49$0$3298$ :
if printf '%sn ' "$-" | grep -q 'i'

Oups, il y a un petit espace en trop. C'est :
if printf '%sn' "$-" | grep -q 'i'

Je n'utilise pas bash mais le fichier /etc/skel/.bashrc de ma
distribution contient :
----------------------------------------------------------------------
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
alias ls='ls --color=auto'
PS1='[ W]$ '
----------------------------------------------------------------------
Ça me parait pas mal.
--
Benoit Izac
Avatar
Francois Lafont
On 06/12/2017 12:37 AM, Benoit Izac wrote:
Je n'utilise pas bash mais le fichier /etc/skel/.bashrc de ma
distribution contient :
----------------------------------------------------------------------
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
alias ls='ls --color=auto'
PS1='[ W]$ '
----------------------------------------------------------------------
Ça me parait pas mal.

En effet c'est mieux que mon grep qui crée un nouveau processus.
Après j'allais arguer que mon if avait l'avantage d'être
compatible shell POSIX alors que [[ $- != *i* ]] est sans doute
une basherie mais bon... une basherie dans un .bashrc c'est pas
incohérent. ;)
--
François Lafont
1 2