configurando uma senha para o cron rsync sobre o ssh

2

Estou escrevendo um script bash que será chamado do cron para extrair um arquivo de um servidor remoto uma vez por dia. Estou usando o SSH, por isso preciso fornecer uma senha automaticamente, pois ela está sendo executada sem supervisão. Aqui está o que eu tenho até agora:

1: crie um par de chaves de DSA via ssh-keygen
2: copiar a chave pública para o servidor remoto
3: configure ssh-agent para lidar com a frase secreta chave

A minha pergunta é: Tudo isto é necessário? Esta é a abordagem mais simples / melhor? Esta é uma tarefa muito simples, então eu gostaria de tornar a configuração o mais simples possível, mantendo um nível razoável de segurança.

Informação adicional:
não executando o daemon rsync
-as máquinas são Ubuntu linux

    
por Hollister 09.11.2010 / 15:10

4 respostas

7

Tudo o que você fizer será inseguro sem o uso de ssh e sshd .

A maneira canônica é usar scp ou até melhor, rsync e uma chave ssh sem senha.

Como alternativa, crie uma chave usada somente para cópia e, na extremidade remota, edite o arquivo authorized_keys para conter apenas o (s) comando (s) necessário (s) e a chave, por exemplo:

# remote_server:/home/copyuser/.ssh/authorized_keys:
command="[...]" ssh-rsa KEY_HERE user@host

Há também scponly disponível. Se você criar um usuário, defina o shell em /etc/passwd to /usr/bin/scponly e eles não poderão fazer login, mas copie os arquivos para dentro e para fora de acordo com as permissões normais.

    
por 09.11.2010 / 15:44
2

Embora eu suponha que você possa usar uma chave privada protegida por frase-senha, isso geralmente não é recomendado para processos que devem ser executados via cron. Eu recomendaria ignorar a frase secreta e, em seguida, verificar se a conta de usuário que você está usando tem privilégios muito limitados na caixa de destino. Ao ignorar a senha, você não precisará lidar com ssh-agent .

    
por 09.11.2010 / 15:18
1

Aqui estão minhas recomendações:

  • Crie um conjunto específico de chaves públicas / privadas de SSH para esta tarefa cron. Use: ssh-keygen -t rsa -N''f id_cronjobname
  • Proteja o arquivo id_cronjobname resultante de tal forma que somente a tarefa cron possa lê-lo. Se esse arquivo for comprometido, qualquer pessoa com esse arquivo de chaves poderá obter os mesmos privilégios.
  • Restringir o uso dessa chave no final remoto. Por exemplo, no remote authorized_keys, você pode prefixar a chave com o exemplo abaixo.
  • Considere também usar "from" para limitar o endereço IP no arquivo authorized_keys. Veja "man sshd" para mais informações sobre estas restrições.

Exemplo de linha do arquivo remote_keys remoto:

no-pty,no-agent-forwarding,no-X11-forwarding,no-port-forwarding,command="rsync --server --sender -vlogDtprze.i --ignore-errors --numeric-ids --inplace . /path/on/destination/system" ssh-rsa SSH_KEY_STRING user@host"

O comando exato para colocar lá você pode obter executando o comando rsync que você planeja usar, e então ao mesmo tempo no sistema remoto faça "ps awwlx | grep rsync".

NOTA: Um problema comum é que o uso do cron job não tem a chave SSH do host remoto, então ele está tentando perguntar se a conexão está ok. Certifique-se de colocar a chave do host SSH do sistema remoto em / etc / ssh / ssh_known_hosts (provavelmente apenas copie-a do seu próprio arquivo ~ / .ssh / known_hosts depois de ter se conectado). Como alternativa, você pode fazer "su - $ USER_CRONJOB_RUNS_AS" e, em seguida, invocar manualmente o comando e verificar se ele funciona. Além disso, isso é bom para testar o trabalho.

    
por 14.11.2010 / 22:48
0

Na etapa 1 (gerar chaves), quando for perguntado por uma paráfrase, você deve pressionar Enter imediatamente - você terá um par de chaves sem paráfrase, então você pode pular o passo # 3 (configure ssh-agent ).

Em termos de segurança, nesta configuração, se o seu cliente ssh for comprometido, o servidor ssh (do qual você está obtendo) também se tornará aberto para o adversário (como não-root, se você não estiver efetuando login como root). Isso não é um grande problema e é uma maneira bastante comum de fazer as coisas. Mas tente fazer atualizações de segurança em seus sistemas Ubuntu periodicamente.

Qualquer coisa mais simples do que essa configuração terá uma segurança muito baixa.

As opções descritas por serverninja proporcionam maior segurança (melhor isolamento entre o cliente e o servidor), mas essas configurações uma sobrecarga de configuração maior e mais difícil de depurar.

Depois de configurar o par de chaves sem senha (copie a chave pub para ~ / .ssh / autorized_keys no servidor), o rsync será sem opções extras, como ssh e scp.

    
por 09.11.2010 / 16:25

Tags