Měl jsem stejný problém a nepodařilo se mi to pomocí metod navržených v ostatních odpovědích. To, co nakonec fungovalo, bylo výslovně odeslat mého „uživatele“ při kopírování souboru, jak je uvedeno v oficiální dokumentaci. Důležitou součástí je "[email protected]" v
gcloud compute scp [[[email protected]]INSTANCE:]SRC [[[[email protected]]INSTANCE:]SRC …] [[[email protected]]INSTANCE:]DEST
V mém případě jsem mohl zpočátku přenášet soubory zadáním:
gcloud compute scp instance_name:~/file_to_copy /local_dir
ale poté, co jsem dostal povolení odepřeno, zprovoznil jsem to tak, že jsem místo toho napsal:
gcloud compute scp [email protected]_name:~/file_to_copy /local_dir
kde v mém případě bylo uživatelské jméno to, se kterým jsem byl přihlášen do Google Cloud.
vložte [email protected]
před názvem instance:
local:$ gcloud compute copy-files /Users/Bryan/Documents/Websites/gce/index.php [email protected]:/var/www/html --zone us-central1-a
Ke kopírování z místního počítače do zapisovatelného adresáře na vzdáleném počítači GCE používám bash skript; pak pomocí ssh přesuňte soubory.
SRC="/cygdrive/d/mysourcedir"
TEMP="~/incoming"
DEST="/var/my-disk1/my/target/dir"
Musíte také nastavit GCE_USER a 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"
V mém případě nechci chown cílový adresář, protože to způsobuje další problémy s jinými skripty ...
Důvodem, proč to nefunguje, je, že vaše uživatelské jméno nemá oprávnění k instanci virtuálního počítače GCE, a proto nemůže zapisovat do /var/www/html/
.
Poznámka že jelikož se tato otázka týká virtuálních počítačů Google Compute Engine, nemůžete SSH přímo na virtuální počítač jako root
, ani nemůžete kopírovat soubory přímo jako root
, ze stejného důvodu:gcloud compute copy-files
používá scp
který se opírá o ssh
pro ověření.
Možná řešení:
-
(také navrhl Faizan v komentářích) toto řešení bude vyžadovat vždy dva kroky
-
použijte
gcloud compute copy-files
pro přenos souborů/adresářů, do kterých může uživatel zapisovat, např./tmp
nebo/home/$USER
-
přihlaste se k virtuálnímu počítači GCE pomocí
gcloud compute ssh
nebo prostřednictvím SSH tlačítko na konzole a zkopírujte pomocísudo
získat správná oprávnění:# note: sample command; adjust paths appropriately
sudo cp -r $HOME/html/* /var/www/html
-
-
toto řešení je jedním krokem s několika předchozími přípravnými pracemi:
-
jednorázové nastavení:udělte svému uživatelskému jménu přístup pro zápis na
/var/www/html
přímo; to lze provést několika způsoby; zde je jeden přístup:# make the HTML directory owned by current user, recursively
sudo chown -R $USER /var/www/html
-
nyní můžete spustit kopii v jednom kroku:
gcloud compute copy-files /Users/Bryan/Documents/Websites/gce/index.php example-instance:/var/www/html --zone us-central1-a
-