Ich hatte das gleiche Problem und konnte es mit den in den anderen Antworten vorgeschlagenen Methoden nicht zum Laufen bringen. Was schließlich funktionierte, war, meinen "Benutzer" beim Kopieren der Datei explizit einzusenden, wie in der offiziellen Dokumentation angegeben. Der wichtige Teil ist "example@unixlinux.online" in
gcloud compute scp [[example@unixlinux.online]INSTANCE:]SRC [[[example@unixlinux.online]INSTANCE:]SRC …] [[example@unixlinux.online]INSTANCE:]DEST
In meinem Fall konnte ich zunächst Dateien übertragen, indem ich Folgendes eingab:
gcloud compute scp instance_name:~/file_to_copy /local_dir
aber nachdem mir die Erlaubnis verweigert wurde, funktionierte es, indem ich stattdessen eintippte:
gcloud compute scp example@unixlinux.online_name:~/file_to_copy /local_dir
wobei der Benutzername in meinem Fall der war, mit dem ich bei Google Cloud angemeldet war.
example@unixlinux.online einfügen vor dem Instanznamen:
local:$ gcloud compute copy-files /Users/Bryan/Documents/Websites/gce/index.php example@unixlinux.online:/var/www/html --zone us-central1-a
Ich verwende ein Bash-Skript, um von meinem lokalen Computer in ein beschreibbares Verzeichnis auf dem entfernten GCE-Computer zu kopieren. dann verschieben Sie die Dateien mit ssh.
SRC="/cygdrive/d/mysourcedir"
TEMP="~/incoming"
DEST="/var/my-disk1/my/target/dir"
Sie müssen auch GCE_USER und GCE_INSTANCE
festlegenecho "=== 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"
In meinem Fall möchte ich das Zielverzeichnis nicht ändern, da dies andere Probleme mit anderen Skripten verursacht ...
Dies funktioniert nicht, weil Ihr Benutzername keine Berechtigungen für die GCE-VM-Instanz hat und daher nicht in /var/www/html/ schreiben kann .
Hinweis Da es sich bei dieser Frage um Google Compute Engine-VMs handelt, können Sie als root nicht direkt eine SSH-Verbindung zu einer VM herstellen , noch können Sie Dateien direkt als root kopieren , aus dem gleichen Grund:gcloud compute copy-files verwendet scp die sich auf ssh stützt zur Authentifizierung.
Mögliche Lösungen:
-
(auch von Faizan in den Kommentaren vorgeschlagen) Diese Lösung erfordert jedes Mal zwei Schritte
-
Verwenden Sie
gcloud compute copy-filesum Dateien/Verzeichnisse zu übertragen, in die Ihr Benutzer schreiben kann, z. B./tmpoder/home/$USER -
Melden Sie sich über
gcloud compute sshbei der GCE-VM an oder über SSH auf der Konsole anklicken und mitsudokopieren um die richtigen Berechtigungen zu erhalten:# note: sample command; adjust paths appropriatelysudo cp -r $HOME/html/* /var/www/html
-
-
Diese Lösung ist ein Schritt mit einigen Vorarbeiten:
-
Einmalige Einrichtung:Geben Sie Ihrem Benutzernamen Schreibzugriff auf
/var/www/htmldirekt; dies kann auf verschiedene Weise erfolgen; Hier ist ein Ansatz:# make the HTML directory owned by current user, recursivelysudo chown -R $USER /var/www/html -
Jetzt können Sie die Kopie in einem Schritt ausführen:
gcloud compute copy-files /Users/Bryan/Documents/Websites/gce/index.php example-instance:/var/www/html --zone us-central1-a
-