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:
-
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
-
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.