Я уже установил открытый ключ для автоматизации входа на удаленный сервер для моего пользователя.
Итак, cli работает без проблем:
rsync -r -a -v -e "ssh -l user" --delete ~/local/file 111.111.11.111:~/remote/;
Но когда я пытаюсь запустить то же самое из сценария PHP (на веб-странице на моем локальном сервере):
$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);
Вот что я получаю:
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]
Разрешения qre устанавливаются следующим образом:
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 ~/
Я зарегистрировал два ключа на ~ / .ssh / authorized_keys:
user@localserver
apache@localserver
Я иссяк из идей ... Думаю, мне нужно сделать что-то еще в удаленном файле / etc / ssh / sshd_config. Я использую Nginx на обоих серверах. Спасибо за любую помощь.
ОБНОВИТЬ:
Хотя я не могу получить rsync, вот как мне удалось передать файл с локального на удаленный:
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!';
Требуется локальный файл: 0644 Требуется удаленная папка: 0775
Я также читал это предложение: «Я не думаю, что вы хотите« скопировать ключ куда-нибудь, где apache сможет его достать »- это нарушение безопасности. Лучше изменить сценарий для запуска от имени защищенного пользователя, а затем настроить ключи .ssh для входа без пароля между серверами.
Если кто-то знает, как это сделать, пожалуйста, это будет большим подспорьем.
пытаться -e "ssh -l user -i <keyfile>"
При запуске в командной строке ssh
использовать ключевые файлы на $HOME/.ssh/
, но в PHP он запускается от имени пользователя Apache, поэтому может не иметь $HOME
; тем более $HOME/.ssh/id_dsa
. Итак, либо вы специально указываете ему, какой ключевой файл использовать, либо вручную создаете этот каталог и его содержимое.