Подтвердить что ты не робот

`gcloud compute copy-files`: разрешение отклоняется при копировании файлов

Мне сложно скопировать файлы на мой Google Compute Engine. Я использую сервер Ubuntu в Google Compute Engine.

Я делаю это с моего терминала OS X, и я уже авторизовался с помощью gcloud.

local:$ gcloud compute copy-files /Users/Bryan/Documents/Websites/gce/index.php example-instance:/var/www/html --zone us-central1-a
Warning: Permanently added '<IP>' (RSA) to the list of known hosts.
scp: /var/www/html/index.php: Permission denied
ERROR: (gcloud.compute.copy-files) [/usr/bin/scp] exited with return code [1].
4b9b3361

Ответ 1

вставить [email protected] перед именем экземпляра:

local:$ gcloud compute copy-files /Users/Bryan/Documents/Websites/gce/index.php [email protected]:/var/www/html --zone us-central1-a

Ответ 2

Причина, по которой это не работает, заключается в том, что ваше имя пользователя не имеет разрешений для экземпляра виртуальной машины GCE и поэтому не может писать в /var/www/html/.

Обратите внимание, что поскольку этот вопрос касается виртуальных машин Google Compute Engine, вы не можете использовать SSH напрямую для виртуальной машины в качестве пользователя root, а также не можете копировать файлы напрямую как root, по той же причине: gcloud compute copy-files использует scp который полагается на ssh для аутентификации.

Возможные решения:

  1. (также предложенный Faizan в комментариях), это решение потребует два шага каждый раз

    1. используйте gcloud compute copy-files для передачи файлов/каталогов, где ваш пользователь может писать, например, /tmp или /home/$USER

    2. войдите в GCE VM через gcloud compute ssh или через кнопку SSH на консоли и скопируйте с помощью sudo чтобы получить соответствующие разрешения:

      # note: sample command; adjust paths appropriately

      sudo cp -r $HOME/html/*/var/www/html

  2. это решение является одним из шагов с предварительной подготовкой:

    1. одноразовая настройка: предоставить ваше имя пользователя для прямого доступа к /var/www/html; это можно сделать несколькими способами; здесь один подход:

      # make the HTML directory owned by current user, recursively

      sudo chown -r $USER/var/www/html

    2. теперь вы можете запустить копию за один шаг:

      gcloud compute copy-files/Users/Bryan/Documents/Websites/gce/index.php example-instance: /var/www/html --zone us-central1-a

Ответ 3

Я использую bash script для копирования с моего локального компьютера на записываемый каталог на удаленном компьютере GCE; затем с помощью ssh переместите файлы.

SRC="/cygdrive/d/mysourcedir"
TEMP="~/incoming"
DEST="/var/my-disk1/my/target/dir"

Вам также необходимо установить GCE_USER и GCE_INSTANCE

echo "=== Pushing data from $SRC to $DEST in two simple steps"
echo "=== 1) Copy to a writable temp directoy in user home"
gcloud compute copy-files "$SRC"/*.* "${GCE_USER}@${GCE_INSTANCE}:$TEMP"
echo "=== 2) Move with 'sudo' to destination"
gcloud compute ssh ${GCE_USER}@${GCE_INSTANCE} --command "sudo mv $TEMP/*.* $DEST" 

В моем случае я не хочу, чтобы chown целевой каталог, поскольку это вызывает другие проблемы с другими скриптами...

Ответ 4

ОБНОВЛЕНИЕ

gcloud compute copy-files устарел.

Используйте вместо этого:

$ gcloud compute scp example-instance:~/REMOTE-DIR ~/LOCAL-DIR \ --zone us-central1-a

Дополнительная информация: https://cloud.google.com/sdk/gcloud/reference/compute/scp

Ответ 5

У меня была такая же проблема, и я не смог ее использовать, используя методы, предложенные в других ответах. Наконец-то я работал над тем, чтобы явным образом отправлял своего "пользователя" при копировании файла, как указано в официальной документации. Важной частью является "USER @" в

gcloud compute scp [[[email protected]]INSTANCE:]SRC [[[[email protected]]INSTANCE:]SRC …] [[[email protected]]INSTANCE:]DEST

В моем случае я мог сначала перенести файлы, набрав:

gcloud compute scp instance_name:~/file_to_copy /local_dir

но после того, как я получил разрешение, я получил его, вместо этого набрав:

gcloud compute scp [email protected]_name:~/file_to_copy /local_dir

где имя пользователя в моем случае было тем, с кем я вошел в Google Cloud.