Tuve el mismo problema y no conseguí que funcionara usando los métodos sugeridos en las otras respuestas. Lo que finalmente funcionó fue enviar explícitamente mi "usuario" al copiar el archivo como se indica en la documentación oficial. La parte importante es "[email protected]" en
gcloud compute scp [[[email protected]]INSTANCE:]SRC [[[[email protected]]INSTANCE:]SRC …] [[[email protected]]INSTANCE:]DEST
En mi caso, inicialmente podría transferir archivos escribiendo:
gcloud compute scp instance_name:~/file_to_copy /local_dir
pero después de que me denegaron el permiso, conseguí que funcionara escribiendo:
gcloud compute scp [email protected]_name:~/file_to_copy /local_dir
donde el nombre de usuario en mi caso era con el que había iniciado sesión en Google Cloud.
insertar [email protected]
antes del nombre de la instancia:
local:$ gcloud compute copy-files /Users/Bryan/Documents/Websites/gce/index.php [email protected]:/var/www/html --zone us-central1-a
Utilizo un script bash para copiar desde mi máquina local al directorio de escritura en la máquina GCE remota; luego usando ssh mueve los archivos.
SRC="/cygdrive/d/mysourcedir"
TEMP="~/incoming"
DEST="/var/my-disk1/my/target/dir"
También debe configurar GCE_USER y 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"
En mi caso, no quiero cortar el directorio de destino ya que esto causa otros problemas con otros scripts...
La razón por la que esto no funciona es que su nombre de usuario no tiene permisos en la instancia de VM de GCE y, por lo tanto, no puede escribir en /var/www/html/
.
Nota que, dado que esta pregunta es sobre máquinas virtuales de Google Compute Engine, no puede usar SSH directamente en una máquina virtual como root
, ni puede copiar archivos directamente como root
, por la misma razón:gcloud compute copy-files
usa scp
que se basa en ssh
para la autenticación.
Posibles soluciones:
-
(también sugerido por Faizan en los comentarios) esta solución requerirá dos pasos cada vez
-
usa
gcloud compute copy-files
para transferir archivos/directorios donde su usuario puede escribir, por ejemplo,/tmp
o/home/$USER
-
inicie sesión en la VM de GCE a través de
gcloud compute ssh
o a través de SSH en la consola y copiar usandosudo
para obtener los permisos adecuados:# note: sample command; adjust paths appropriately
sudo cp -r $HOME/html/* /var/www/html
-
-
esta solución es un paso con un trabajo de preparación previo:
-
configuración única:otorga a tu nombre de usuario acceso de escritura a
/var/www/html
directamente; Esto se puede hacer de varias maneras; aquí hay un enfoque:# make the HTML directory owned by current user, recursively
sudo chown -R $USER /var/www/html
-
ahora puede ejecutar la copia en un solo paso:
gcloud compute copy-files /Users/Bryan/Documents/Websites/gce/index.php example-instance:/var/www/html --zone us-central1-a
-