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-files
pour transférer des fichiers/répertoires où votre utilisateur peut écrire, par exemple,/tmp
ou/home/$USER
-
connectez-vous à la VM GCE via
gcloud compute ssh
ou via le SSH bouton sur la console et copiez en utilisantsudo
pour obtenir les autorisations appropriées :# note: sample command; adjust paths appropriately
sudo 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/html
directement; cela peut se faire de plusieurs manières; voici une approche :# make the HTML directory owned by current user, recursively
sudo 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
-