Eu preciso fazer rsync
por ssh
e quer fazê-lo automaticamente, sem a necessidade de passar a senha para ssh
manualmente.
111
Você deve usar um arquivo de chave sem senha para logins de ssh com script. Isso é obviamente um risco de segurança, tome cuidado para que o arquivo de chaves em si esteja adequadamente protegido.
ssh -i
sempre deve ser possível do lado do cliente. Você quer dizer que o servidor pode não suportar todos os tipos de chave (por exemplo, ECDSA)? Isso não seria um grande problema, apenas um caso de usossh-keygen -t
. Estou esquecendo de algo?rsync -e
essh -i
.Use o utilitário de provedor de senha ssh não interativo "sshpass"
No Ubuntu
Comando para rsync
fonte
sshpass -p`cat .password` ssh [...]
. Em seguida, proteja seu.password
arquivochmod 400 .password
para garantir que apenas o usuário possa lê-lo.src_path
deve ser server: path, assim:server01.mydomain.local:/path/to/folder
-a
a ativação do rsync inclui-rlptgoD
, você pode encurtar o comando desta forma:rsync -az ...
Você pode evitar o prompt de senha no
rsync
comando, definindo a variável de ambienteRSYNC_PASSWORD
para a senha que você deseja usar ou usando a--password-file
opção.fonte
Se você não pode usar uma chave pública / privada, você pode usar esperar:
Você precisará substituir SRC e DEST por seus parâmetros normais de origem e destino de rsync e substituir PASS por sua senha. Apenas certifique-se de que este arquivo esteja armazenado com segurança!
fonte
Red Hat Enterprise Linux Server release 5.11 (Tikanga)
Eu tenho que trabalhar assim:
fonte
remote_port_ssh
definido? Parece um espaço reservado para um valor real.Use uma chave ssh.
Olhe para
ssh-keygen
essh-copy-id
.Depois disso, você pode usar um
rsync
desta forma:fonte
Outra possibilidade interessante:
Nota: -i dsa_private_file que é sua chave privada RSA / DSA
Basicamente, essa abordagem é muito semelhante à descrita por @Mad Scientist, porém você não precisa copiar sua chave privada para ~ / .ssh. Em outras palavras, é útil para tarefas ad-hoc (acesso único sem senha)
fonte
O seguinte funciona para mim:
Eu tive que instalar
sshpass
fonte
É difícil inserir automaticamente a senha para o comando rsync. Minha solução simples para evitar o problema é montar a pasta para fazer o backup. Em seguida, use um comando rsync local para fazer backup da pasta montada.
fonte
Embora você já tenha implementado isso agora,
você também pode usar qualquer implementação esperada (você encontrará alternativas em Perl, Python: pexpect, paramiko, etc.)
fonte
Eu uso um arquivo VBScript para fazer isso na plataforma Windows, ele me serve muito bem.
fonte
A solução oficial (e outras) estava incompleta quando visitei pela primeira vez, então voltei, anos depois, para postar esta abordagem alternativa no caso de qualquer outra pessoa acabar aqui com a intenção de usar um par de chaves pública / privada:
Execute a partir da máquina de backup de destino, que puxa da origem para o backup de destino
rsync -av --delete -e 'ssh -p 59333 -i /home/user/.ssh/id_rsa' [email protected]:/home/user/Server/ /home/keith/Server/
Execute isso da máquina de origem, que envia o backup de origem para o destino
rsync -av --delete -e 'ssh -p 59333 -i /home/user/.ssh/id_rsa' /home/user/Server/ [email protected]:/home/user/Server/
E, se você não estiver usando uma porta alternativa para ssh, considere os exemplos mais elegantes abaixo:
Execute a partir da máquina de backup de destino, que puxa da origem para o backup de destino:
sudo rsync -avi --delete [email protected]:/var/www/ /media/sdb1/backups/www/
Execute a partir da máquina de origem, que envia o backup de origem para o destino:
sudo rsync -avi --delete /media/sdb1/backups/www/ [email protected]:/var/www/
Se ainda for solicitada uma senha, você precisará verificar sua configuração de ssh
/etc/ssh/sshd_config
e verificar se os usuários na origem e no destino possuem a respectiva chave ssh pública dos outros enviando cada um comssh-copy-id [email protected]
.(Novamente, isso é para usar pares de chaves ssh sem uma senha, como uma abordagem alternativa, e não para passar a senha por meio de um arquivo.)
fonte
Seguindo a ideia postada por Andrew Seaford, isso é feito usando sshfs:
fonte