Arquivos raiz Rsync entre sistemas sem especificar senha

2

Isso parece muito complicado para mim.

Eu configurei meus dois sistemas para que eu possa rsync arquivos entre eles como eu, sem especificar a senha. Agora, o problema é para rsync arquivos que pertencem a root . Em ambos os meus sistemas, não há senhas root. A única maneira de se tornar root é via sudo . Então eu não posso nem dar uma senha para sudo rsyn local root@remote: , não use meu ssh-agent para fornecer frase secreta. Eu não quero configurar uma senha de root em nenhum sistema; e eu preciso que os arquivos sejam de propriedade do root em ambos os sistemas.

EDITAR : Usando os arquivos que pertencem a root é apenas um exemplo, eu preciso de uma maneira da minha conta não privilegiada ler / escrever sistema (incluindo de propriedade) arquivos facilmente. Um exemplo é copiar meu ambiente configurado / raiz para o sistema recém-instalado. Os dois sistemas são, na verdade, duas VMs sob um único host, portanto, não é uma grande preocupação copiar arquivos de propriedade da raiz entre eles.

EDIT 2 : Se eu quiser apenas copiar meu ambiente configurado / root para o sistema recém-instalado, posso usar o tar:

sudo tar cvzf - /root | ssh me@remote sudo tar xvzf - -C /

Mas eu preciso de rsync para atualizar de tempos em tempos. Qualquer maneira fácil de fazer isso acontecer?

EDIT 3: Formalmente formule a pergunta

Tudo bem, tudo começou com a pergunta, como rsync arquivos que pertencem à raiz entre dois sistemas como um usuário normal sem privilégios, sem especificar senha, sob a condição de que,

  1. A conta root está bloqueada em ambos os sistemas. Ou seja, não há root senhas. A única maneira de se tornar root é via sudo (prática de segurança recomendada, veja link )
  2. Eu não quero um sudo totalmente sem senha, mas também não quero digitar senhas o tempo todo.
  3. O usuário sem privilégios normal inseriu sua frase secreta ssh no agente ssh.

Obrigado

    
por xpt 09.06.2013 / 01:22

4 respostas

2

A solução.

  1. Adicionar a chave ssh do usuário a trabalhos raiz remotos, mas apenas pela metade, ou seja, agora rsyn ... root@remote:... funciona. A parte desafiadora é obter sudo rsyn ... também.
  2. Para obter sudo rsyn ... work, o que é necessário é - Usar o agente SSH para autenticação sudo, link
  3. Para instalar o módulo PAM pam-ssh-agent-auth no Ubuntu, você pode usar o ppa que acabei de criar, link . Testado bem no Ubuntu 12.04 preciso e 13.10 saucy.

HTH

    
por 26.06.2013 / 00:52
0

Outra forma seria criar um script .sh em ambos os servidores, contendo seus scripts rsync.

Em seguida, execute-os via cronjob ou via ssh:

ssh not-your-root-user@remoteserver sudo sh your-rsync-script.sh

Ou apenas execute seu script rsync diretamente por meio do ssh

ssh not-your-root-user@remoteserver sudo rsync local root@remote

Eu preferiria o cronjob se fosse um trabalho agendado de rsync.

    
por 09.06.2013 / 02:06
0

Bem, depende do que você quer fazer. Os arquivos precisam ser de propriedade do root em ambos os sistemas? Eles não o farão se você estiver simplesmente fazendo um backup, para poder executar apenas rsync como root, mas efetuando login no servidor remoto como usuário normal.

Crie uma chave para que o local root efetue login como usuário normal remoto (usarei xpt como nome de usuário normal):

sudo -i
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub xpt@remote

Agora você deve poder usar ssh ou rsync (como root) sem senha, da seguinte forma:

rsync /path/to/local xpt@remote

Se os arquivos precisam ser de propriedade do root em ambos os sistemas, as coisas ficam um pouco mais complexas. O mais fácil é simplesmente configurar uma senha root em ambos os sistemas:

sudo -i
passwd 

Agora você pode fazer logon como root no conteúdo do seu coração.

É claro que a melhor coisa a ser feita seria não copiar arquivos pela rede como root . Eu não posso realmente imaginar por que você iria querer e o risco não vale a pena, apenas copie os arquivos e brinque com sudo quando necessário, uma vez copiados.

ATUALIZAÇÃO:

Repito que a maneira mais simples de fazer isso é criar uma senha de root para cada máquina e depois copiar como raiz. Não entendo por que você não quer isso, é tão simples quanto executar sudo passwd .

De qualquer forma, se você insiste que não quer criar uma senha de root, a única maneira de contornar isso eu posso ver é executar dois comandos:

  1. Execute rsync para copiar para um diretório gravável do usuário (eu uso mktmp para criar um nome de diretório aleatório):

    dir='mktemp -u'; && sudo rsync -avz /root xpt@remote:$dir
    
  2. Mova o conteúdo para remote:/root

    ssh -t lacoloc@badabing sudo rsync -avz "$dir"/* /root
    

    A opção -t força a alocação tty e é necessária para executar os comandos sudo no sistema remoto.

Você pode combinar os dois adicionando isso ao seu arquivo ~/.bashrc (me avise se você não usar o bash):

function Rrsync(){
    dir='mktemp -u' &&
    sudo rsync -avz $1 $2:$dir &&
    ssh -t $2 sudo rsync -avz $dir/ $3 && rm -rf $dir
}

Você pode então chamar a função assim:

Rrsync /root xpt@remote /root
------ ----- ---------- -----
   |     |       |        |---> The target directory on the remote server
   |     |       |------------> username@server 
   |     |--------------------> Path to local source directory
   |--------------------------> The function name

Tenha em mente que você pode ter que brincar com a adição / remoção de uma barra / da fonte rsync e dos destinos, dependendo se você está copiando um diretório ou o conteúdo do diretório. Veja man rsync .

Para que isso funcione sem uma senha, você terá que executar ssh-keygen e ssh-copy-id como root, como descrevi no início. Você ainda terá que digitar sua senha para os dois comandos sudo , uma para sua máquina local e outra para o controle remoto.

    
por 09.06.2013 / 01:52
0

Você pode fazer isso diretamente com o rsync com o criativo usando a opção --rsync-path . Então você usaria:

rsync -a -e "ssh" --rsync-path="sudo rsync" localdir/ [email protected]:/remotedir

Observe que isso exige que o "sudo rsync" no host remoto NÃO solicite a frase secreta. Isso pode ser feito de várias maneiras:

  • fazendo sudo -v no remoto antes de executar o rsync (ideal para tarefas rsync únicas). Seu sudo não deve usar a opção tty_tickets para que isso funcione.
  • colocando username ALL= NOPASSWD:/usr/bin/rsync em /etc/sudoers no host remoto.
  • usando pam-ssh-agent-auth no controle remoto para /etc/pam.d/sudo

Naturalmente, você poderia também, em vez de "rsync sobre ssh", usar "rsync no modo daemon" (ver rsyncd.conf(5) e /etc/default/rsync no Debian GNU / Linux, por exemplo) para realizar o que você deseja, com benefício adicional de melhor velocidade de transferência.

    
por 13.03.2015 / 20:21