#1 Le 31/05/2010, à 19:31
- chiron
Backuppc et openssh, connexion impossible
Bonsoir,
J'essaie de mettre en place un serveur backuppc en suivant le tuto: http://doc.ubuntu-fr.org/backuppc mais ssh refuse de se connecter.
J'ai deux machines virtuelles lucid lynx 10.04 sous vmware:
backup-server 172.16.47.128
backup1 172.16.47.129
en essayant de me connnecter à backup1 depuis le serveur j'obtiens systématiquement une demande de mot de passe et un accès refusé. J'ai essayé de rajouter ALL: 172.16.47. dans hosts.allow sur backup1, pas d'effet.
Quelqun a une idée?
In hoc signo vinces.
Hors ligne
#2 Le 31/05/2010, à 23:16
- chiron
Re : Backuppc et openssh, connexion impossible
J'essaie de me dépatouiller...
sur backup1 un ssh root@localhost me donne la même chose, un comble!
Bref, je suis coincé, si une bonne âme passe par là...
In hoc signo vinces.
Hors ligne
#3 Le 31/05/2010, à 23:38
- kyncani
Re : Backuppc et openssh, connexion impossible
J'avais commencé un petit script pour faire cela. Mais je ne sais pas si il marchera dans ton cas (il a fonctionné chez moi).
Si tu te sens un petit peu aventureux, copie le script quelque part sur le serveur backuppc et lance-le avec "bash /nom/du/fichier/script backuppc@localhost root@backup1".
Ca va autoriser l'accès par clé privée/clé publique depuis le compte backuppc du serveur backuppc vers le compte root de la machine à sauvegarder.
Fait un copier/coller de _l'ensemble_ des messages qui sont affichés.
Pour vérifier si sa fonctionne, depuis le serveur backuppc, devient root avec "sudo -i", puis prend l'identité de backuppc avec "su - backuppc". Ensuite, la commande suivante devrait fonctionner sans demander de mot de passe :
ssh root@backup1 echo success
#! /usr/bin/env bash
#####################################################################
## Online help
usage() {
cat <<EOU
NAME
$prog - Enable passwordless authentication
USAGE
$prog SRCUSER[@SRCHOST] DSTUSER[@DSTHOST]
OPTIONS
--debug
Activate debugging mode
--dstsshuser
Try to connect to DSTHOST using given user
-h, --help
Show help
--srcsshuser
Try to connect to SRCHOST using given user
--step2
--step3
Reserved internal options, do not use
DESCRIPTION
$prog enable passwordless authentication from SRCUSER to DSTUSER.
if SRCHOST or DSTHOST is ommited, localhost is assumed.
VERSION
1.0.0
AUTHOR
Yannick Le Saint (kyncani) <y.lesaint@gmail.com>
EOU
}
## Temporary script name that will be user on srcuser@srchost
tmpscript() {
local safeprog=`echo "$prog" | sed 's/[^A-Za-z0-9_-]//g'`
test "$safeprog" = "" && safeprog="sshauth"
echo "$safeprog" | grep -q '^[A-Za-z0-9]' || safeprog="X$safeprog"
echo "/tmp/$prog-`whoami`-$TMPSCRIPTUSER-$srcuser@$srchost-to-$dstuser@$dsthost"
}
## Return true if we are executing in step2
in_step2() {
$step2_opt || test "$srcuser" = "`whoami`" -a "$srchost" = "`hostname`"
}
## Make sure ~/.ssh has sane permissions
fixsshperms() {
local d="$HOME/.ssh"
test -e "$d" || return 0
chown -R `id -u`:`id -g` "$d" \
&& chmod -R go-rwx "$d"
}
## Configure access from $srcuser@$srchost
do_step2() {
local keyfile="$HOME/.ssh/id_rsa.pub"
local key=
local step3key=
local sshuser=
echo "`whoami`@`hostname` : looking for ssh key $keyfile"
test -e "$keyfile" || ssh-keygen -t rsa || return 1
test -e "$keyfile" || return 1
fixsshperms || return 1
key=`cat "$keyfile"`
step3key=`echo "$key" | sed 's/[[:space:]]/@@@/g'`
copyscript "$dsthost" "$dstuser" "$dstsshuser" "root" "`whoami`" || return 1
sshuser="$SSHUSER"
echo "Starting running as $sshuser@$dsthost"
ssh -tX "$sshuser@$dsthost" "
bash `tmpscript` $startupopts --step3=$step3key $srcuser@`hostname` $dstuser@$dsthost || exit 1;
rm -f `tmpscript` &>/dev/null;
true;
" \
|| return 1
}
## Configure access from $dstuser@$dsthost
do_step3() {
local f="$HOME/.ssh/authorized_keys"
local key=`echo "$step3_opt" | sed 's/@@@/ /g'`
test -e "$HOME/.ssh/" || mkdir "$HOME/.ssh/" || return 1
fixsshperms || return 1
test -e "$f" || { touch "$f" && chmod 00600 "$f"; } || return 1
if grep -qFx "$key" "$f"; then
echo
echo "SSH KEY IS ALREADY ENABLED, NOTHING TO DO"
echo
else
echo "$key" >>"$f" || return 1
echo
echo "SSH KEY ADDED WITH SUCCESS"
echo
fi
}
## Try to connect using ssh, return true if connection was successful
## Send a message about what's going on
## Usage: try_ssh_connect user host
try_ssh_connect() {
local user="$1"
local host="$2"
echo "Trying to connect to $host with $user using ssh"
ssh -o NumberOfPasswordPrompts=1 "$user@$host" true
}
## Execute a command as root
do_as_root() {
echo "Let's see if we can become root@`hostname` using sudo"
if sudo true; then
echo "Yep, becoming root using sudo on `hostname`"
if test "$step3_opt" = ""; then
exec sudo -i -- "$@"
else
echo coucou
exec sudo -i -- "$@" "--step3=$step3_opt"
fi
else
echo "Nope, using su instead"
if test "$step3_opt" = ""; then
exec su - root -c "$*"
else
exec su - root -c "$* --step3=$step3_opt"
fi
fi
}
## Copy currently executing script to a given host
## Usage: copyscript host user1 user2, ...
## export SSHUSER as the username that was used
copyscript() {
local host="$1"
local success=false
local sshuser=
shift
while test $# -gt 0; do
sshuser="$1"
shift
if try_ssh_connect "$sshuser" "$host"; then
success=true
break
fi
done
if ! $success; then
echo "$prog: cannot connect to $host using ssh" >&2
return 1
fi
echo "Copying $prog to $sshuser@$host"
export TMPSCRIPTUSER="$sshuser"
dst="$sshuser@$host:`tmpscript`"
if ! scp "$0" "$dst"; then
echo "$prog: cannot copy $0 to $dst" >&2
exit 1
fi
export SSHUSER="$sshuser"
true
}
## Return fully qualified program file
fqprog() {
if echo "$0" | grep -q "^/"; then
echo "$0"
else
echo "`pwd`/$0"
fi
}
#####################################################################
## Program name
prog=`basename "$0"`
## Step2 is where we are executing as $srcuser@$srchost
step2_opt=false
## Step3 is where we are executing on $dsthost, $step3_opt
## will contain our new key
step3_opt=
## Debug mode
debug=false
## Original command line
startupcmd="$*"
## Current options
startupopts=
## Added so that script copied using different accounts don't use the
## same filename, which caused permission error.
export TMPSCRIPTUSER=
srcuser=
srchost=localhost
srcsshuser=`whoami`
dstuser=
dsthost=localhost
dstsshuser=`whoami`
#####################################################################
echo "STARTING RUNNING : `whoami`@`hostname`:`pwd` : $0 $*"
while test $# -gt 0; do
case "$1" in
--dstsshuser)
test $# -gt 1 || { echo "$prog: $1 is expecting a value" >&2; exit 1; }
shift
dstsshuser="$1"
;;
--dstsshuser=*) dstsshuser=`echo "$1" | sed 's/^[^=]*=//'`;;
--debug) { debug=true; set -x; };;
-h|--help) { usage && exit || exit 1; };;
--srcsshuser)
test $# -gt 1 || { echo "$prog: $1 is expecting a value" >&2; exit 1; }
shift
srcsshuser="$1"
;;
--srcsshuser=*) srcsshuser=`echo "$1" | sed 's/^[^=]*=//'`;;
--step2) step2_opt=true;;
--step3=*) step3_opt=`echo "$1" | sed 's/^[^=]*=//'`;;
-*) { echo "$prog: unknown option $1" >&2; exit 1; };;
*)
if test "$srcuser" = ""; then
srcuser="$1"
elif test "$dstuser" = ""; then
dstuser="$1"
else
echo "$prog: too many arguments given ($1)" >&2
exit 1
fi
;;
esac
shift
done
if test "$dstuser" = ""; then
echo "$prog: Usage: $prog SRCUSER DSTUSER" >&2
exit 1
fi
if echo "$srcuser" | grep -q "@"; then
srchost=`echo "$srcuser" | sed 's/.*@//'`
srcuser=`echo "$srcuser" | sed 's/@[^@]*$//'`
fi
if echo "$dstuser" | grep -q "@"; then
dsthost=`echo "$dstuser" | sed 's/.*@//'`
dstuser=`echo "$dstuser" | sed 's/@[^@]*$//'`
fi
startupopts=""
$debug && startupopts="$startupopts --debug"
test "$srcsshuser" = "" || startupopts="$startupopts --srcsshuser=$srcsshuser"
test "$dstsshuser" = "" || startupopts="$startupopts --dstsshuser=$dstsshuser"
#####################################################################
if test "$step3_opt" != ""; then
if test "`whoami`" = "$dstuser"; then
do_step3 && exit
elif test `id -u` -eq 0; then
cp "$0" "`tmpscript`" || exit 1
chmod a+rx "`tmpscript`" || exit 1
su - "$dstuser" -c "`tmpscript` --step3=$step3_opt $startupopts $srcuser@$srchost $dstuser@$dsthost"
else
do_as_root bash "`fqprog`" $startupcmd && exit
fi
exit 1
fi
if in_step2; then
if test "`whoami`" = "$srcuser"; then
do_step2 && exit
elif test `id -u` -eq 0; then
cp "$0" "`tmpscript`" || exit 1
chmod a+rx "`tmpscript`" || exit 1
exec su - "$srcuser" -c "`tmpscript` $startupcmd"
else
do_as_root "$0" $startupcmd && exit
fi
exit 1
fi
if test "$srchost" = "localhost" -o "$srchost" = "`hostname`"; then
if test `id -u` -ne 0; then
do_as_root "`fqprog`" $startupopts $startupcmd && exit
exit 1
fi
echo "Copying $prog to `tmpscript`"
if ! cp "$0" "`tmpscript`"; then
echo "$prog: cannot copy $0 to `tmpscript`" >&2
exit 1
fi
if ! chmod a+rx "`tmpscript`"; then
echo "$prog: canno set `tmpscript` a+rx" >&2
exit 1
fi
echo "Starting $prog as $srcuser"
su - "$srcuser" -c "`tmpscript` $startupopts --step2 $srcuser@$srchost $dstuser@$dsthost" \
|| exit 1
rm -f "`tmpscript`" &>/dev/null
exit 0
else
copyscript "$srchost" "$srcuser" "$srcsshuser" "root" "`whoami`" || exit 1
sshuser="$SSHUSER"
echo "Connecting to $srchost as $sshuser"
ssh -tX "$sshuser@$srchost" "
bash `tmpscript` $startupopts --step2 $srcuser@localhost $dstuser@$dsthost || exit 1;
rm -f `tmpscript` &>/dev/null;
true;
" \
|| exit 1
fi
true
#####################################################################
Hors ligne
#4 Le 01/06/2010, à 21:49
- chiron
Re : Backuppc et openssh, connexion impossible
Un GRAND merci.
J'ai du rajouter backup1 et son ip dans le /etc/hosts de backup-server, sinon il n'arrive pas à le trouver
Voilà ce que ça donne:
jyl@backup-server:~/Bureau$ bash script backuppc@localhost root@backup1
STARTING RUNNING : jyl@backup-server:/home/jyl/Bureau : script backuppc@localhost root@backup1
Let's see if we can become root@backup-server using sudo
Yep, becoming root using sudo on backup-server
STARTING RUNNING : root@backup-server:/root : /home/jyl/Bureau/script --srcsshuser=jyl --dstsshuser=jyl backuppc@localhost root@backup1
Copying script to /tmp/script-root--backuppc@localhost-to-root@backup1
Starting script as backuppc
STARTING RUNNING : backuppc@backup-server:/var/lib/backuppc : /tmp/script-root--backuppc@localhost-to-root@backup1 --srcsshuser=jyl --dstsshuser=jyl --step2 backuppc@localhost root@backup1
backuppc@backup-server : looking for ssh key /var/lib/backuppc/.ssh/id_rsa.pub
Trying to connect to backup1 with root using ssh
The authenticity of host 'backup1 (172.16.47.129)' can't be established.
RSA key fingerprint is 7a:04:9d:3a:4d:0b:ce:3c:6b:6e:4f:20:6c:ab:94:65.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'backup1' (RSA) to the list of known hosts.
root@backup1's password:
Permission denied (publickey,password).
Trying to connect to backup1 with jyl using ssh
jyl@backup1's password:
Copying script-root--backuppc@localhost-to-root@backup1 to jyl@backup1
jyl@backup1's password:
script-root--backuppc@localhost-to-root@backu 100% 8810 8.6KB/s 00:00
Starting running as jyl@backup1
jyl@backup1's password:
Warning: No xauth data; using fake authentication data for X11 forwarding.
/usr/bin/X11/xauth: creating new authority file /home/jyl/.Xauthority
STARTING RUNNING : jyl@backup1:/home/jyl : /tmp/script-root--backuppc@localhost-to-root@backup1-backuppc-jyl-backuppc@localhost-to-root@backup1 --srcsshuser=jyl --dstsshuser=jyl --step3=ssh-rsa@@@AAAAB3NzaC1yc2EAAAABIwAAAQEA9F7N6Yj/nGVKwHk4We3/WQ9JkjRGwPUfCgvrFBB1VcN/AFepc2wQo3qXaMjsZnNjisb2ijrIv4mGI5tmwxeUPrtOgws+x/8PbUv5627Y3ykNdZAOvMNXHE2+jUr5linz1PiuCc2cdj5ojcJ+fFouLTuNtzEnlcnbDH0sRFLJaLpuN90W9bNAZRGUuJb1jqgHHQw+He+5vtk4Nb8lV+DdQlBqabhnABbmawGIN2xIfr2RCwmgNpOfFt3Cuwo7IpUropB7syX+EdegkMwF6uMv5KOr4ghWNmq885VLJ0pjSr2hUZ3tJ6K5gFWDo2jdHQ6R7HzMKcGIDb6gwekyhHb1IQ==@@@backuppc@backup-server backuppc@backup-server root@backup1
Let's see if we can become root@backup1 using sudo
[sudo] password for jyl:
Yep, becoming root using sudo on backup1
coucou
STARTING RUNNING : root@backup1:/root : /tmp/script-root--backuppc@localhost-to-root@backup1-backuppc-jyl-backuppc@localhost-to-root@backup1 --srcsshuser=jyl --dstsshuser=jyl --step3=ssh-rsa@@@AAAAB3NzaC1yc2EAAAABIwAAAQEA9F7N6Yj/nGVKwHk4We3/WQ9JkjRGwPUfCgvrFBB1VcN/AFepc2wQo3qXaMjsZnNjisb2ijrIv4mGI5tmwxeUPrtOgws+x/8PbUv5627Y3ykNdZAOvMNXHE2+jUr5linz1PiuCc2cdj5ojcJ+fFouLTuNtzEnlcnbDH0sRFLJaLpuN90W9bNAZRGUuJb1jqgHHQw+He+5vtk4Nb8lV+DdQlBqabhnABbmawGIN2xIfr2RCwmgNpOfFt3Cuwo7IpUropB7syX+EdegkMwF6uMv5KOr4ghWNmq885VLJ0pjSr2hUZ3tJ6K5gFWDo2jdHQ6R7HzMKcGIDb6gwekyhHb1IQ==@@@backuppc@backup-server backuppc@backup-server root@backup1 --step3=ssh-rsa@@@AAAAB3NzaC1yc2EAAAABIwAAAQEA9F7N6Yj/nGVKwHk4We3/WQ9JkjRGwPUfCgvrFBB1VcN/AFepc2wQo3qXaMjsZnNjisb2ijrIv4mGI5tmwxeUPrtOgws+x/8PbUv5627Y3ykNdZAOvMNXHE2+jUr5linz1PiuCc2cdj5ojcJ+fFouLTuNtzEnlcnbDH0sRFLJaLpuN90W9bNAZRGUuJb1jqgHHQw+He+5vtk4Nb8lV+DdQlBqabhnABbmawGIN2xIfr2RCwmgNpOfFt3Cuwo7IpUropB7syX+EdegkMwF6uMv5KOr4ghWNmq885VLJ0pjSr2hUZ3tJ6K5gFWDo2jdHQ6R7HzMKcGIDb6gwekyhHb1IQ==@@@backuppc@backup-server
SSH KEY ADDED WITH SUCCESS
In hoc signo vinces.
Hors ligne
#5 Le 01/06/2010, à 22:25
- kyncani
Re : Backuppc et openssh, connexion impossible
Ok
Bon ben si tu as vérifié que ça fonctionne correctement comme j'ai dis
---
Pour vérifier si sa fonctionne, depuis le serveur backuppc, devient root avec "sudo -i", puis prend l'identité de backuppc avec "su - backuppc". Ensuite, la commande suivante devrait fonctionner sans demander de mot de passe :
ssh root@backup1 echo success
---
L'accès ssh root est prêt pour backuppc
Et je ne me rappelais plus que le script demandait autant de fois des mots de passe, mais on ne peut pas véritablement faire autrement.
Hors ligne
#6 Le 01/06/2010, à 22:57
- chiron
Re : Backuppc et openssh, connexion impossible
Ca fonctionne bien, aucun mot de passe n'est demandé pour ssh root@backup1 echo success
Si je comprends bien, en lisant le log il faut lancer le script pour chaque machine à sauvegarder, et l'utilisateur jyl doit exister sur chaque machine. Exact?
Super boulot!
In hoc signo vinces.
Hors ligne
#7 Le 01/06/2010, à 23:41
- kyncani
Re : Backuppc et openssh, connexion impossible
Ok, donc ça fonctionne
Le script sert à mettre en place un accès ssh sans mot de passe d'un compte à un autre.
Ici de backuppc@serveurBackuppc vers root@clientBackuppc
Effectivement, il faut configurer un accès par machine. Donc lancer ce script pour chaque client.
Il faut un premier compte qui sert de point d'entrée sur la machine distante. Si root ne fonctionne pas (par exemple, sur ubuntu, root existe mais n'a pas de mot de passe), il essaie le nom du compte qui a servi a lancer le script (ici jyl).
Tu peux spécifier le nom du compte distant à utiliser avec l'option --dstsshuser
Hors ligne