Ответ 1
вставить [email protected]
перед именем экземпляра:
local:$ gcloud compute copy-files /Users/Bryan/Documents/Websites/gce/index.php [email protected]:/var/www/html --zone us-central1-a
Мне сложно скопировать файлы на мой 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].
вставить [email protected]
перед именем экземпляра:
local:$ gcloud compute copy-files /Users/Bryan/Documents/Websites/gce/index.php [email protected]:/var/www/html --zone us-central1-a
Причина, по которой это не работает, заключается в том, что ваше имя пользователя не имеет разрешений для экземпляра виртуальной машины GCE и поэтому не может писать в /var/www/html/
.
Обратите внимание, что поскольку этот вопрос касается виртуальных машин Google Compute Engine, вы не можете использовать SSH напрямую для виртуальной машины в качестве пользователя root
, а также не можете копировать файлы напрямую как root
, по той же причине: gcloud compute copy-files
использует scp
который полагается на ssh
для аутентификации.
Возможные решения:
(также предложенный Faizan в комментариях), это решение потребует два шага каждый раз
используйте gcloud compute copy-files
для передачи файлов/каталогов, где ваш пользователь может писать, например, /tmp
или /home/$USER
войдите в GCE VM через gcloud compute ssh
или через кнопку SSH на консоли и скопируйте с помощью sudo
чтобы получить соответствующие разрешения:
# note: sample command; adjust paths appropriately
sudo cp -r $HOME/html/*/var/www/html
это решение является одним из шагов с предварительной подготовкой:
одноразовая настройка: предоставить ваше имя пользователя для прямого доступа к /var/www/html
; это можно сделать несколькими способами; здесь один подход:
# make the HTML directory owned by current user, recursively
sudo chown -r $USER/var/www/html
теперь вы можете запустить копию за один шаг:
gcloud compute copy-files/Users/Bryan/Documents/Websites/gce/index.php example-instance: /var/www/html --zone us-central1-a
Я использую 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 целевой каталог, поскольку это вызывает другие проблемы с другими скриптами...
ОБНОВЛЕНИЕ
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
У меня была такая же проблема, и я не смог ее использовать, используя методы, предложенные в других ответах. Наконец-то я работал над тем, чтобы явным образом отправлял своего "пользователя" при копировании файла, как указано в официальной документации. Важной частью является "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.