J'ai du mal à copier des fichiers sur mon Google Compute Engine. J'utilise un serveur Ubuntu sur Google Compute Engine.
Je le fais depuis mon terminal OS X et je suis déjà autorisé à utiliser 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].
insérer root@
avant le nom de l'instance:
local:$ gcloud compute copy-files /Users/Bryan/Documents/Websites/gce/index.php root@example-instance:/var/www/html --zone us-central1-a
La raison pour laquelle cela ne fonctionne pas est que votre nom d'utilisateur n'a pas d'autorisations sur l'instance GCE VM et ne peut donc pas écrire dans /var/www/html/
.
Notez que puisque cette question concerne les machines virtuelles de Google Compute Engine, vous ne pouvez pas SSH directement vers un VM as root
, vous ne pouvez pas non plus copier des fichiers directement en tant que root
, pour la même raison: gcloud compute copy-files
utilise scp
qui s'appuie sur ssh
pour l'authentification.
Solutions possibles:
(également suggéré par Faizan dans les commentaires) cette solution nécessitera deux étapes à chaque fois
utilisation gcloud compute copy-files
pour transférer des fichiers/répertoires dans lesquels votre utilisateur peut écrire, par exemple, /tmp
ou /home/$USER
connectez-vous au GCE VM via gcloud compute ssh
ou via le bouton [~ # ~] ssh [~ # ~] sur la console et copiez à l'aide de Sudo
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: donnez à 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 maintenant 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
J'utilise un script bash pour copier de ma machine locale vers un répertoire accessible en écriture 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 afficher le répertoire cible car cela provoque d'autres problèmes avec d'autres scripts ...
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é, c'est d'envoyer explicitement mon "utilisateur" lors de la copie du fichier comme indiqué dans la documentation officielle . La partie importante étant le "USER @" dans
gcloud compute scp [[USER@]INSTANCE:]SRC [[[USER@]INSTANCE:]SRC …] [[USER@]INSTANCE:]DEST
Dans mon cas, j'ai pu 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 my_user_name@instance_name:~/file_to_copy /local_dir
où le nom d'utilisateur dans mon cas était celui avec lequel j'étais connecté à Google Cloud.
MISE À JOUR
gcloud compute copy-files
est obsolète .
Utilisez plutôt:
$ gcloud compute scp example-instance:~/REMOTE-DIR ~/LOCAL-DIR \ --zone us-central1-a
Plus d'informations: https://cloud.google.com/sdk/gcloud/reference/compute/scp