Я пытаюсь настроить способ одной команды для перемещения кода веб-сайта с машины разработчика в мой экземпляр Ubuntu EC2 и скопировать его прямо в папку / var / www / mywebsite, где nginx ожидает найти веб-сайты в этом поле .
Эти образы Ubuntu AMI поставляются с пользователем ubuntu по умолчанию. Я могу без проблем выполнить синхронизацию папки с машины разработчика в папку / home / ubuntu / экземпляра EC2:
rsync -avL --progress -e "ssh -i /home/me/myhosts.pem" source-folder ubuntu@ec2-xx-xxx-xxx-xxx.compute-1.amazonaws.com:~/code
но когда я пытаюсь выполнить rsync ту же папку в / var / www как root:
rsync -avL --progress -e "ssh -i /home/me/myhosts.pem" source-folder root@ec2-xx-xxx-xxx-xxx.compute-1.amazonaws.com:/var/www/
Я получаю следующую ошибку:
protocol version mismatch -- is your shell clean?
(see the rsync man page for an explanation)
rsync error: protocol incompatibility (code 2) at compat.c(174) [sender=3.0.9]
Я не совсем понимаю, почему это происходит. Я заметил, что не могу войти по ssh как root, так как получаю следующее сообщение:
Please login as the user "ubuntu" rather than the user "root".
Connection to ec2[...] closed.
что могло бы объяснить поведение выше. У sshd_config действительно есть "PermitRootLogin", да, но я предполагаю, что он заблокирован где-то еще.
Я предполагаю, что одним из вариантов было бы изменить права доступа к папке / var / www (сейчас это корень корня 755) и разрешить ubuntu копировать туда файлы без необходимости каждый раз повышаться до root. Однако я не уверен, что это хорошая идея с точки зрения безопасности и правильное ли это решение, поэтому буду признателен за совет.
Спасибо!
Вы также можете запустить rsync с помощью sudo на удаленном компьютере, чтобы запустить его с правами root. Вариант, который вы можете использовать для этого: --rsync-path
:
rsync -avL --progress -e "ssh -i /home/me/myhosts.pem" --rsync-path="sudo rsync" source-folder ubuntu@ec2-xx-xxx-xxx-xxx.compute-1.amazonaws.com:/var/www/