Re: Rsync sobre SSH (forced-commands-only)
Muchas gracias por tu gran respuesta, Francisco
Aunque, no me acaba de quedar claro algo...
El 10/02/14 09:20, Francisco SG escribió:
...
> En la máquina que realiza el backup habrás definido una "conexión ssh"
> con root que usa una clave que se usa exclusivamente para eso asociada
> con el host remoto.
Correcto!
> En el host remoto la conexión está limitada para realizar exclusivamente
> el backup del modo que comentas:
> PermitRootLogin forced-commands-only
Exacto!
> Y en el authorized_keys lo que defino junto a la clave es lo siguiente:
> from="xxxxxxxxxxx",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="/usr/local/bin/valida-rsync.sh"
> ssh-dss...
Bueno, no puedo especificar con el "from=xxx" ya que sería una IP
dinámica, pero por lo demas...
> El "truquito" viene de http://troy.jdmz.net/rsync/#validate-rsync se
> trata de un script que hace de wrap para rsync validando la conexión,
> pero hace no mucho descubrí que el propio paquete de rsync trae un
> script en perl con el mismo fin, que es más flexible y que está
> instalado en /usr/share/doc/rsync/scripts/rrsync.gz y puedes usar de un
> modo muy similar, por ejemplo:
>
> from="xxxxxxxxxxx",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="/usr/local/bin/rrsync
> -ro proyectos" ssh-rsa...
...
El parametro en "~/.ssh/authorized_keys" seria...
command="/usr/local/bin/rrsync -ro /" ssh-dss ...
Yo no capisco nada de Perl (si al menos fuera Python...). Tengo que
definir la variable SSH_ORIGINAL_COMMAND?
y supongo que los parametros tambien, no?
#!/usr/bin/perl
# Name: /usr/local/bin/rrsync (should also have a symlink in /usr/bin)
# Purpose: Restricts rsync to subdirectory declared in .ssh/authorized_keys
# Author: Joe Smith <js-cgi@inwap.com> 30-Sep-2004
# Modified by: Wayne Davison <wayned@samba.org>
use strict;
...
# The client uses "rsync -av -e ssh src/ server:dir/", and sshd on the
server
# executes this program when .ssh/authorized_keys has 'command="..."'.
# For example:
# command="rrsync logs/client" ssh-rsa
AAAAB3NzaC1yc2EAAAABIwAAAIEAzGhEeNlPr...
# command="rrsync -ro results" ssh-rsa
AAAAB3NzaC1yc2EAAAABIwAAAIEAmkHG1WCjC...
#
# Format of the envrionment variables set by sshd:
# SSH_ORIGINAL_COMMAND=rsync --server -vlogDtpr --partial . ARG
# push
# SSH_ORIGINAL_COMMAND=rsync --server --sender -vlogDtpr --partial .
ARGS # pull
# SSH_CONNECTION=client_addr client_port server_port
my $command = $ENV{SSH_ORIGINAL_COMMAND};
die "$0: Not invoked via sshd\n$Usage" unless defined $command;
die "$0: SSH_ORIGINAL_COMMAND='$command' is not rsync\n" unless $command
=~ s/^rsync\s+//;
...
our $short_no_arg = 'ACDEHIKLORSWXbcdgklmnoprstuvxz'; # DO NOT REMOVE ANY
our $short_with_num = 'B'; # DO NOT REMOVE ANY
# To disable a long-named option, change its value to a -1. The values
mean:
# 0 = the option has no arg; 1 = the arg doesn't need any checking; 2 = only
# check the arg when receiving; and 3 = always check the arg.
our %long_opt = (
'append' => 0,
'backup-dir' => 2,
'bwlimit' => 1,
'checksum-seed' => 1,
'compare-dest' => 2,
'compress-level' => 1,
'copy-dest' => 2,
'copy-unsafe-links' => 0,
'daemon' => -1,
'delay-updates' => 0,
'delete' => 0,
'delete-after' => 0,
'delete-before' => 0,
'delete-delay' => 0,
'delete-during' => 0,
'delete-excluded' => 0,
'existing' => 0,
'fake-super' => 0,
'files-from' => 3,
'force' => 0,
'from0' => 0,
'fuzzy' => 0,
'iconv' => 1,
'ignore-errors' => 0,
'ignore-existing' => 0,
'inplace' => 0,
'link-dest' => 2,
'list-only' => 0,
'log-file' => 3,
'log-format' => 1,
'max-delete' => 1,
'max-size' => 1,
'min-size' => 1,
'modify-window' => 1,
'no-i-r' => 0,
'no-implied-dirs' => 0,
'no-r' => 0,
'no-relative' => 0,
'no-specials' => 0,
'numeric-ids' => 0,
'only-write-batch' => 1,
'partial' => 0,
'partial-dir' => 2,
'remove-sent-files' => $ro ? -1 : 0,
'remove-source-files' => $ro ? -1 : 0,
'safe-links' => 0,
'sender' => 0,
'server' => 0,
'size-only' => 0,
'skip-compress' => 1,
'specials' => 0,
'suffix' => 1,
'super' => 0,
'temp-dir' => 2,
'timeout' => 1,
'use-qsort' => 0,
);
...
Un saludo,
> El 9 de febrero de 2014, 18:47, Alberto <alberto@bersol.info
> <mailto:alberto@bersol.info>> escribió:
>
> Hola,
> estoy teniendo problemas para algo que creo recordar que ya hice en el
> pasado, pero ahora, no se porque, no corre.
>
> El objetivo es hacer backup de un host remoto sobre uno local. La idea
> es hacerlo a traves de RSYNC por SSH.
>
> Lo hago con un script cuya orden es la siguiente:
>
> HostLocal# rsync -avuz -e ssh --log-file=$vFilelog --progress --append
> --partial --delete --exclude-from=$vFilexclude_remoto HostRemoto:/
> ${vPmbackup}/mnt/REMOTO/
>
> El acceso SSH al host remoto no está permitido a root, por razones
> obvias, pero para hacer la copia total, por supuesto de forma NO
> Interactiva, lo hago a traves de clave pública, y limito el acceso por
> configuración de SSH al comando concreto con la directiva...
>
> [root@remoto]# grep forced-commands-only /etc/ssh/sshd_config
> PermitRootLogin forced-commands-only
>
> Y para utilizarlo, debo especificarlo en el "authorized_keys" de root (
>
> [root@vps .ssh]# cat authorized_keys
> command="rsync" ssh-dss
> ????????????????????????????????????????????????????????????????????
> ????????????????????????????????????????????????????????????????????
> ????????????????????????????????????????????????????????????????????
> ????????????? root@HostLocal
>
> el problema es que hay que meterle la linea completa (parametros
> incluidos) en el "authorized_keys" ya que solo va a aceptar lo que este
> ahi, por tanto
> todos los parametros no los reconoce.
>
> Logicamente, no puedo meter todos los parametros, o sea, la linea
> completa. Como podeis ver, hay algunos que son variables, en base a la
> fecha de la copia y demas, con lo que no tengo forma de meterle la linea
> entera, y por tanto, el comando rsync falla.
>
> Acepto sugerencias.
>
> Gracias,
> un saludo,
>
>
>
> --
> To UNSUBSCRIBE, email to
> debian-user-spanish-REQUEST@lists.debian.org
> <mailto:debian-user-spanish-REQUEST@lists.debian.org>
> with a subject of "unsubscribe". Trouble? Contact
> listmaster@lists.debian.org <mailto:listmaster@lists.debian.org>
> Archive: [🔎] 52F7BF16.4050406@bersol.info">http://lists.debian.org/[🔎] 52F7BF16.4050406@bersol.info
>
>
Reply to: