Google Compute Engineにファイルをコピーするのに苦労しています。 Google Compute EngineでUbuntuサーバーを使用しています。
私はOS X端末からこれを行っており、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].
挿入root@
インスタンス名の前:
local:$ gcloud compute copy-files /Users/Bryan/Documents/Websites/gce/index.php root@example-instance:/var/www/html --zone us-central1-a
これが機能しないのは、ユーザー名にGCE VMインスタンスに対するアクセス許可がないため、/var/www/html/
に書き込むことができないためです。
注この質問はGoogle Compute Engine VMに関するものであるため、直接VM as root
として、または同じ理由で、root
としてファイルを直接コピーできますか?gcloud compute copy-files
は、scp
を認証に使用するssh
を使用します。
可能な解決策:
(コメントで Faizan も提案)このソリューションは毎回2つのステップを必要とします
gcloud compute copy-files
を使用して、ユーザーが書き込み可能なファイル/ディレクトリを転送します(例:/tmp
または/home/$USER
)
gCEへのログインVM via gcloud compute ssh
または[〜#〜] ssh [〜#〜]コンソールのボタンをクリックし、Sudo
を使用してコピーして適切な権限を取得します。
# note: sample command; adjust paths appropriately
Sudo cp -r $HOME/html/* /var/www/html
このソリューションは、いくつかの事前準備作業の1ステップです。
ワンタイムセットアップ:ユーザー名に/var/www/html
への書き込みアクセス権を直接付与します。これはいくつかの方法で実行できます。ここに一つのアプローチがあります:
# make the HTML directory owned by current user, recursively
Sudo chown -R $USER /var/www/html
これで、コピーを1ステップで実行できます。
gcloud compute copy-files /Users/Bryan/Documents/Websites/gce/index.php example-instance:/var/www/html --zone us-central1-a
Bashスクリプトを使用して、ローカルマシンからリモートGCEマシンの書き込み可能なディレクトリにコピーします。次に、sshを使用してファイルを移動します。
SRC="/cygdrive/d/mysourcedir"
TEMP="~/incoming"
DEST="/var/my-disk1/my/target/dir"
また、GCE_USERと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"
私の場合、これは他のスクリプトで他の問題を引き起こすため、ターゲットディレクトリをchownしたくありません...
私は同じ問題を抱えていましたが、他の回答で提案された方法を使用しても機能しませんでした。最終的に機能したのは、公式の documentation に示されているように、ファイルをコピーするときに明示的に「ユーザー」を送信することでした。重要な部分は「USER @」
gcloud compute scp [[USER@]INSTANCE:]SRC [[[USER@]INSTANCE:]SRC …] [[USER@]INSTANCE:]DEST
私の場合、最初に次のように入力してファイルを転送できました。
gcloud compute scp instance_name:~/file_to_copy /local_dir
しかし、許可が拒否された後、代わりに次のように入力して機能しました:
gcloud compute scp my_user_name@instance_name:~/file_to_copy /local_dir
私の場合のユーザー名は、Google Cloudにログインしたときに使用したユーザー名です。
更新
gcloud compute copy-files
は、非推奨です。
代わりに使用します:
$ gcloud compute scp example-instance:~/REMOTE-DIR ~/LOCAL-DIR \ --zone us-central1-a
詳細: https://cloud.google.com/sdk/gcloud/reference/compute/scp