Ho avuto lo stesso problema e non sono riuscito a farlo funzionare utilizzando i metodi suggeriti nelle altre risposte. Ciò che alla fine ha funzionato è stato inviare esplicitamente il mio "utente" durante la copia del file come indicato nella documentazione ufficiale. La parte importante è "[email protected]" in
gcloud compute scp [[[email protected]]INSTANCE:]SRC [[[[email protected]]INSTANCE:]SRC …] [[[email protected]]INSTANCE:]DEST
Nel mio caso potrei inizialmente trasferire i file digitando:
gcloud compute scp instance_name:~/file_to_copy /local_dir
ma dopo aver ottenuto il permesso negato, l'ho fatto funzionare digitando invece:
gcloud compute scp [email protected]_name:~/file_to_copy /local_dir
dove il nome utente nel mio caso era quello con cui avevo effettuato l'accesso a Google Cloud.
inserire [email protected]
prima del nome dell'istanza:
local:$ gcloud compute copy-files /Users/Bryan/Documents/Websites/gce/index.php [email protected]:/var/www/html --zone us-central1-a
Uso uno script bash per copiare dalla mia macchina locale alla directory scrivibile sulla macchina GCE remota; poi usando ssh sposta i file.
SRC="/cygdrive/d/mysourcedir"
TEMP="~/incoming"
DEST="/var/my-disk1/my/target/dir"
Devi anche impostare GCE_USER e 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"
Nel mio caso non voglio chown la directory di destinazione in quanto ciò causa altri problemi con altri script ...
Il motivo per cui questo non funziona è che il tuo nome utente non dispone delle autorizzazioni sull'istanza GCE VM e quindi non può scrivere su /var/www/html/
.
Nota che poiché questa domanda riguarda le VM di Google Compute Engine, non puoi accedere tramite SSH direttamente a una VM come root
, né puoi copiare i file direttamente come root
, per lo stesso motivo:gcloud compute copy-files
utilizza scp
che si basa su ssh
per l'autenticazione.
Possibili soluzioni:
-
(suggerito anche da Faizan nei commenti) questa soluzione richiederà due passaggi ogni volta
-
usa
gcloud compute copy-files
per trasferire file/directory in cui l'utente può scrivere, ad esempio/tmp
o/home/$USER
-
accedere alla VM GCE tramite
gcloud compute ssh
o tramite SSH sulla console e copia usandosudo
per ottenere le autorizzazioni appropriate:# note: sample command; adjust paths appropriately
sudo cp -r $HOME/html/* /var/www/html
-
-
questa soluzione è un passaggio con alcuni lavori di preparazione precedenti:
-
configurazione una tantum:dai al tuo nome utente accesso in scrittura a
/var/www/html
direttamente; Questo può essere fatto in diversi modi; ecco un approccio:# make the HTML directory owned by current user, recursively
sudo chown -R $USER /var/www/html
-
ora puoi eseguire la copia in un solo passaggio:
gcloud compute copy-files /Users/Bryan/Documents/Websites/gce/index.php example-instance:/var/www/html --zone us-central1-a
-