J'ai eu le même problème et je ne l'ai pas fait fonctionner en utilisant les méthodes suggérées dans les autres réponses. Ce qui a finalement fonctionné a été d'envoyer explicitement mon "utilisateur" lors de la copie du fichier comme indiqué dans la documentation officielle. La partie importante étant le "[email protected]" dans
gcloud compute scp [[[email protected]]INSTANCE:]SRC [[[[email protected]]INSTANCE:]SRC …] [[[email protected]]INSTANCE:]DEST
Dans mon cas, je pourrais initialement transférer des fichiers en tapant :
gcloud compute scp instance_name:~/file_to_copy /local_dir
mais après avoir obtenu l'autorisation refusée, je l'ai fait fonctionner en tapant à la place :
gcloud compute scp [email protected]_name:~/file_to_copy /local_dir
où le nom d'utilisateur dans mon cas était celui avec lequel j'étais connecté à Google Cloud.
insérer [email protected] avant le nom de l'instance :
local:$ gcloud compute copy-files /Users/Bryan/Documents/Websites/gce/index.php [email protected]:/var/www/html --zone us-central1-a
J'utilise un script bash pour copier depuis ma machine locale vers un répertoire inscriptible sur la machine GCE distante ; puis en utilisant ssh déplacer les fichiers.
SRC="/cygdrive/d/mysourcedir"
TEMP="~/incoming"
DEST="/var/my-disk1/my/target/dir"
Vous devez également définir GCE_USER et 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"
Dans mon cas, je ne veux pas chown le répertoire cible car cela cause d'autres problèmes avec d'autres scripts ...
La raison pour laquelle cela ne fonctionne pas est que votre nom d'utilisateur ne dispose pas d'autorisations sur l'instance de VM GCE et ne peut donc pas écrire dans /var/www/html/ .
Remarque que puisque cette question concerne les VM Google Compute Engine, vous ne pouvez pas vous connecter directement en SSH à une VM en tant que root , vous ne pouvez pas non plus copier les fichiers directement en tant que root , pour la même raison :gcloud compute copy-files utilise scp qui repose sur ssh pour l'authentification.
Solutions possibles :
-
(également suggéré par Faizan dans les commentaires) cette solution nécessitera à chaque fois deux étapes
-
utilisez
gcloud compute copy-filespour transférer des fichiers/répertoires où votre utilisateur peut écrire, par exemple,/tmpou/home/$USER -
connectez-vous à la VM GCE via
gcloud compute sshou via le SSH bouton sur la console et copiez en utilisantsudopour obtenir les autorisations appropriées :# note: sample command; adjust paths appropriatelysudo cp -r $HOME/html/* /var/www/html
-
-
cette solution est une étape avec un travail de préparation préalable :
-
configuration unique :accordez à votre nom d'utilisateur un accès en écriture à
/var/www/htmldirectement; cela peut se faire de plusieurs manières; voici une approche :# make the HTML directory owned by current user, recursivelysudo chown -R $USER /var/www/html -
vous pouvez désormais exécuter la copie en une seule étape :
gcloud compute copy-files /Users/Bryan/Documents/Websites/gce/index.php example-instance:/var/www/html --zone us-central1-a
-