
Ich möchte CircleCI verwenden, um meinen Code auf einer Compute Engine-Instanz bereitzustellen. Ich habe einen Service-Account-Benutzer erstellt und verwende den folgenden gcloud scp-Befehl:
gcloud --quiet compute scp --recurse dev/test/ [DEST_INSTANCE]:/var/www/dev/dev/test --zone=northamerica-northeast1-a --project [PROJECT_NAME]
um Dateien in den Unterordner „var“ hochzuladen, und die Bereitstellung schlägt mit dem folgenden Fehler fehl:
scp: /var/www/dev/dev/test: Permission denied
ERROR: (gcloud.compute.scp) [/usr/bin/scp] exited with return code [1].
Exited with code 1
Jetzt möchte ich dem Dienstkonto Zugriff gewähren, sehe es aber nicht in der Liste der Benutzer, denen ich Zugriff gewähren soll, wenn ich verwende cat /etc/passwd
. Wie kann ich einem Dienstkonto die Berechtigung erteilen? Die Rollen, die ich diesem Konto zugewiesen habe, sind:
Antwort1
Es sieht so aus, als ob Ihr Benutzername keine Schreibberechtigung für die GCE-VM hat /var/www/dev/dev/test
.
So lösen Sie Ihr ProblemSie können zwischen zwei Problemumgehungen wählen:
Berechtigungen ändern:
Geben Sie Ihrem Benutzernamen direkt Schreibzugriff
/var/www/dev/dev/test
, zum Beispiel:sudo chown -R $USER /var/www/dev/dev/test
Dateien kopieren mit
gcloud compute scp
direkt zu/var/www/dev/dev/test
.
Kopieren Sie Dateien in zwei Schritten:
verwenden
gcloud compute scp
um Dateien/Verzeichnisse zu übertragen, in die Ihr Benutzer schreiben kann, zB/tmp
oder/home/$USER
;SSH in die VM-Instanz über
gcloud compute ssh
oder über die Konsole und kopieren Sie Dateien vom temporären Speicherort,sudo
um die entsprechenden Berechtigungen zu erhalten.
NotizDa es in dieser Frage um GCE-VMs geht, können Sie aus demselben Grund weder direkt per SSH auf eine VM-Instanz zugreifen root
, noch können Sie Dateien direkt als kopieren : verwendet , das zur Authentifizierung auf basiert .root
gcloud compute scp
scp
ssh
Bitte beachten Sie auch die DokumentationÜbertragen von Dateien auf InstanzenAbschnittÜbertragen von Dateien mit dem Befehlszeilentool gcloud.
Antwort2
Bitte überprüfen Sie das verwendete Dienstkonto. Es gibt ein Dienstkonto, das standardmäßig für GCE verwendet wird und von GCP erstellt wurde. Das andere ist das, das Sie erstellt haben.
Wenn Sie das von Ihnen erstellte Konto verwenden: Haben Sie die Anmeldung für das Dienstkonto mithilfe der JSON-Schlüsseldatei autorisiert?
Antwort3
Aktivieren Sie das richtige Dienstkonto, dem Sie die Rollen in Ihrem Screenshot zugewiesen haben, mit dem folgenden Befehl:
gcloud auth activate-service-account $account --key-file=die_Schlüsseldatei.json