Проблема
Пользовательские данные запускаются от имени пользователя root, поэтому эти файлы принадлежат пользователю root и создаются в корневом каталоге "/" (не в домашнем каталоге вашего пользователя "~"). Из документации AWS:
Сценарии, введенные как пользовательские данные, выполняются как пользователь root, поэтому не используйте команду sudo в сценарии. Помните, что любые файлы, которые вы создаете, будут принадлежать пользователю root; если для доступа к файлу требуются пользователи без полномочий root, необходимо соответствующим образом изменить разрешения в сценарии.
Документация по данным пользователя AWS
Что вы можете сделать?
Чтобы иметь доступ к вашим файлам, у вас есть два варианта:
- Использовать root [ не очень хорошая идея для постоянного решения ]
Чтобы убедиться, что причиной вашей проблемы являются права доступа к файлам, перейдите к пользователю root и проверьте наличие файлов в корневом каталоге.
Во-первых, подключитесь к компьютеру с помощью вашего обычного пользователя (ec2-user, ubuntu и т. Д.):
ssh -i key.pem ec2-user@<your_ec2_public_dns_or_ip>
Затем перейдите к пользователю root:
sudo su
Ваш запрос терминала изменится на «#», указывая на переключатель. Переключиться в корневой каталог:
cd /
Теперь перечислите все файлы и каталоги с их разрешениями:
ls -al
Убедитесь, что ваши файлы там. Также обратите внимание на имя владельца «root».
Как только вы проверили проблему, давайте перейдем к фактическому решению; изменение владельца и местоположения загружаемых файлов.
- Изменить владельца и расположение копируемых (загружаемых) файлов.
Предполагая, что у вас есть обычный пользователь с именем ec2-user , измените ваш скрипт следующим образом:
#!/bin/bash
sudo yum update -y
# Change to the user's home directory
cd /home/ec2-user
# A directory called notebooks will be created in the current directory; ie, /home/ec2-user
aws s3 cp s3://mynotebook notebooks/ --recursive
# Change the owner and group of the notebooks' directory and all its children
chown --recursive ec2-user:ec2-user notebooks
# Run jupyter as the ec2-user
runuser -l ec2-user -c 'nohup jupyter notebook'
# TODO Extract the ec2-user value to a variable
Ресурсы
Используйте chown, чтобы установить владельца всех подпапок и файлов папки?
Команда запуска Linux от имени другого пользователя