Validando o rsync via comando SSH authorized_keys = “…”

1

Estou tentando validar o rsync via o arquivo authorized_keys do sshd.

O problema é que não consigo executar o rsync a partir do script de validação.

Este é o meu arquivo authorized_keys:

command="/home/username/Desktop/valrsync username" ssh-rsa AAAA [...]

Aqui está o script valrsync tentado de forma diferente a cada vez:

Teste 1 -

$SSH_ORIGINAL_COMMAND

Saída -

$ rsync [...] / username@remotemachine:/
/home/username/Desktop/valrsync: line 2: rsync: command not found
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(601) [sender=3.0.7]

E, mais importante, Teste 2 -

#!/usr/bin/python

import os
os.system(os.getenv('SSH_ORIGINAL_COMMAND'))

Saída (executando o rsync da máquina local e obtendo a saída de valrsync na máquina remota) -

$ rsync [...] / username@remotemachine:/
sh: rsync: command not found
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(601) [sender=3.0.7]

Eu entendo que o rsync de alguma forma gera uma instância de si mesmo na máquina remota, e obviamente essa instância não é referida quando tento executar o comando rsync via script. O rsync não está instalado no servidor e eu sei que não deveria ser.

Agora a pergunta é: o que posso fazer sobre isso (exceto talvez instalar o rsync no servidor ...?)

    
por Mark 07.07.2011 / 20:54

3 respostas

5

O erro que você está recebendo é rsync: command not found . Isso normalmente implica que sua variável de ambiente $PATH não está configurada corretamente. Usando seu primeiro teste, defina explicitamente PATH para incluir o diretório no qual o comando rsync está instalado. Por exemplo:

#!/bin/sh

PATH=/usr/local/bin:$PATH
export PATH

$SSH_ORIGINAL_COMMAND

Certifique-se de tornar o script executável ( chmod 755 valrsync ).

Tudo isso pressupõe que o rsync está de fato instalado no sistema de destino.

    
por 07.07.2011 / 21:19
0

Assegure-se de ter o rsync instalado e no PATH nas duas extremidades (cliente e servidor). O cliente rsync usa o SSH para executar o rsync no final remoto (servidor). É assim que funciona o rsync.

    
por 14.02.2014 / 19:21
0

Um método melhor do que escrever um script homebrew seria usar rrsync , que nas distribuições baseadas no Debian você já deveria ter instalado ao lado de rsync in /usr/share/doc/rsync/scripts/rrsync.gz . Nesse caso, simplesmente execute o seguinte comando para descompactar o script gzipado em /usr/bin/rrsync :

gunzip /usr/share/doc/rsync/scripts/rrsync.gz -c|sudo tee^Cusr/bin/rrsync && sudo chmod +x /usr/bin/rrsync

(quando já estiver rodando como root , você pode obviamente deixar de lado as invocações sudo )

Em alternativa, transfira rrsync aqui .

Lembrete: ter rsync instalado na máquina remota (aquele com o arquivo authorized_keys ) é um pré-requisito aqui.

Quando isso for feito, você pode simplesmente preceder um command= na frente de uma linha com uma chave pública, invocando rrsync .

Normalmente, você inclui algumas opções de SSH restritivas junto com o command= , por isso pode ser assim:

command="/usr/bin/rrsync -wo /data/backup/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ecdsa-sha2-nistp521 AAAAE...

Ao fornecer esse diretório (você pode usar -ro para somente leitura e -wo para somente gravação), você pode deixar o diretório na invocação rsync .

Assim, sua linha de comando se tornaria rsync [...] / username@remotemachine: (lembre-se do caminho ausente após o : ).

    
por 08.06.2018 / 23:22

Tags