Especifique o arquivo de identidade (id_rsa) com rsync

197

Preciso fazer backups periódicos de um diretório em um servidor remoto que é uma máquina virtual hospedada por uma organização de pesquisa. Eles exigem que o acesso às VMs seja por meio de chaves ssh, o que é bom, exceto que não consigo descobrir como apontar o rsync para a chave ssh deste servidor.

O Rsync não tem problema se o arquivo-chave estiver ~/.ssh/id_rsa, mas quando houver outra coisa que eu recebo Permission denied (publickey).

Com o ssh, posso especificar o arquivo de identidade -i, mas o rsync parece não ter essa opção.

Também tentei mover temporariamente a chave na máquina local para ~/.ssh/id_rsa, mas isso também não funciona.

tl; dr

Você pode especificar um arquivo de identidade com o rsync?

Jangari
fonte
1
Útil também para fazer sudo rsync, que não usa as próprias teclas ssh, por algum motivo.
ijoseph
1
@ijoseph Exatamente, eu uso rsync -aAP "sudo -u user ssh" user@server:dir local_dirao sincronizar a partir de scripts cron que funcionam como root
Martin Pecka

Respostas:

342

Você pode especificar o comando ssh exato através da opção '-e':

rsync -Pav -e "ssh -i $HOME/.ssh/somekey" username@hostname:/from/dir/ /to/dir/

Muitos usuários ssh não estão familiarizados com o arquivo ~ / .ssh / config. Você pode especificar as configurações padrão por host através do arquivo de configuração.

Host hostname
    User username
    IdentityFile ~/.ssh/somekey

A longo prazo, é melhor aprender o arquivo ~ / .ssh / config.

Dan Garthwaite
fonte
Não me ajuda ter o IdentityFile em ssh_config. Eu posso "ssh web1" sem problemas, mas ao usar o rsync na web1: ... ele falha com "Permissão negada (chave pública)".
Zitrax 14/10
1
Tente aumentar a verbosidade do transporte ssh: rsync -e 'ssh -vv' web1: / etc / issue / tmp / issue
Dan Garthwaite
1
Ah Se você estiver automatizando isso e não puder fornecer uma senha, precisará de uma chave ssh sem senha adicional configurada nas duas extremidades. Se você deseja que o rsync funcione sem uma senha em uma sessão interativa, será necessário usar o ssh-agent.
Dan Garthwaite 14/10
16
Duuuuuuude! o ~/.ssh/configarquivo - você abriu um novo universo para mim!
demaniak
2
~ / .ssh / config me salvou o dia, muito obrigado.
smishra
17

Isso pode ser feito com a configuração do usuário SSH, consulte: http://www.cyberciti.biz/faq/create-ssh-config-file-on-linux-unix/ basicamente edite ~ / .ssh / config:

$ nano ~/.ssh/config
#Add Hosts below 
Host server1
HostName examplehost.com
User username
Port 22
IdentityFile /path/to/key

$ rsync -e ssh /home/user/directory [email protected]:home/user/directory/

Isso deve funcionar para qualquer programa que use SSH, rsync,

Cbaker510
fonte
4

PARA SUA INFORMAÇÃO:

1) A chave pública está sempre no diretório inicial do usuário que está efetuando login no servidor remoto, ou seja, se você fizer login como "backup", ela estará localizada em /home/backup/.ssh/authorized_keys. O ID do usuário ao fazer o login define a chave pública usada no destino.

Você pode escolher o ID do usuário ao fazer a conexão de duas maneiras diferentes:

ssh [email protected]
or
ssh -l user_id  destination_server     (<-- that is lower case "L")

Por outro lado, no seu lado, a chave privada está de maneira semelhante no nome do usuário, a menos que você a substitua como descrito na resposta de Dan.

2) Para fins de backup, pode ser desejável criar uma chave restrita, limitada a executar apenas um comando como "rsync". Há uma boa descrição sobre isso relacionada ao backup "rsnapshot", que permite fazer backup remoto do servidor inteiro usando uma conta de usuário não privilegiada e "sudo":

Como "rsnapshot"

O Rsnapshot pode facilmente fazer backup de vários servidores remotos ou locais, tornando-o útil servidor de backup agendado e centralizado.

ajaaskel
fonte