Eu já configurei uma chave pública para automatizar o login no servidor remoto para o meu usuário.
Então, isso está funcionando sem nenhum problema de cli:
rsync -r -a -v -e "ssh -l user" --delete ~/local/file 111.111.11.111:~/remote/;
Mas, quando tento executar o mesmo de um script PHP (em uma página da Web no meu servidor local):
$c='rsync -r -a -v -e --log-file=FILE "ssh -l user" --delete ~/local/file 111.111.11.111:~/remote/';
//exec($c,$data);
passthru($c,$data);
print_r($data);
Isso é o que recebo:
2011/01/23 19:18:29 [6401] rsync: connection unexpectedly closed (0 bytes received so far) [sender] 2011/01/23 19:18:29 [6401]
rsync error: unexplained error (code 255) at io.c(601) [sender=3.0.7]
As permissões qre definidas assim:
Local:
chmod 600 ~/.ssh/local-rsync-key
chmod 600 ~/.ssh/local-apache-key
chmod 700 ~/.ssh/
Remote:
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh/
chmod 700 ~/
Eu registrei duas chaves em ~ / .ssh / authorized_keys:
user@localserver
apache@localserver
Eu fiquei sem idéias ... Eu acho que tenho que fazer outra coisa no arquivo / etc / ssh / sshd_config remoto. Estou executando o Nginx em ambos os servidores. Obrigado por qualquer ajuda.
ATUALIZAÇÃO:
Embora não seja possível obter o rsync, é assim que consegui transferir o arquivo de local para remoto:
if($con=ssh2_connect('111.111.11.111',22)) echo 'ok!';
if(ssh2_auth_password($con,'apache','xxxxxx')) echo ' ok!';
if(ssh2_scp_send($con,'localfile','/remotefolder',0755)) echo ' ok!';
Necessidades de arquivo local: 0644
Necessidades de pasta remota: 0775
Eu também li esta sugestão: "Eu não acho que você queira" copiar a chave em algum lugar onde o apache pode chegar a ela "- isso é uma violação de segurança. Melhor mudar o script para ser executado como um usuário seguro e, em seguida, configure as chaves .ssh para login sem senha entre os servidores.
Se alguém souber como fazer isso, por favor, seria de grande ajuda.