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 "[email protected]" in
gcloud compute scp [[[email protected]]INSTANCE:]SRC [[[[email protected]]INSTANCE:]SRC …] [[[email protected]]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 [email protected]_name:~/file_to_copy /local_dir
wobei der Benutzername in meinem Fall der war, mit dem ich bei Google Cloud angemeldet war.
[email protected]
einfügen vor dem Instanznamen:
local:$ gcloud compute copy-files /Users/Bryan/Documents/Websites/gce/index.php [email protected]:/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-files
um Dateien/Verzeichnisse zu übertragen, in die Ihr Benutzer schreiben kann, z. B./tmp
oder/home/$USER
-
Melden Sie sich über
gcloud compute ssh
bei der GCE-VM an oder über SSH auf der Konsole anklicken und mitsudo
kopieren um die richtigen Berechtigungen zu erhalten:# note: sample command; adjust paths appropriately
sudo 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/html
direkt; dies kann auf verschiedene Weise erfolgen; Hier ist ein Ansatz:# make the HTML directory owned by current user, recursively
sudo 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
-