NPM přidat od soukromé repo nezdaří s permission denied, když je to z existujícího projektu

0

Otázka

Snažil jsem se to ladit super divný problém. Mám projekt, kde se snažím nainstalovat privátní úložiště s npm příkaz.

To nebude fungovat, když je v existující projekt, ale pokud je to nově vytvořený projekt, který byl vytvořen s npm init.

Stávající projekt je v /app a nový projekt je v /opt (pro účely testování)

Běží npm add git+ssh://[email protected]:company/repository.git v /app vrací se:

npm ERR! code 128
npm ERR! An unknown git error occurred
npm ERR! command git --no-replace-objects ls-remote ssh://[email protected]/company/repository.git
npm ERR! [email protected]: Permission denied (publickey).
npm ERR! fatal: Could not read from remote repository.
npm ERR!
npm ERR! Please make sure you have the correct access rights
npm ERR! and the repository exists.

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2021-11-24T00_25_10_559Z-debug.log

Běží přesně stejný příkaz z /opt projekt instalace balíčku správně, bez jakýchkoliv problémů.

Jsem běží to z alpské docker box s openssh nainstalován.

To je Dockerfile

FROM node:16.13-alpine

RUN apk add --no-cache openssh-client git python2

RUN mkdir -p -m 0600 ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts && ln -s /run/secrets/ssh_key ~/.ssh/id_rsa && ln -s /run/secrets/ssh_pub_key ~/.ssh/id_rsa.pub

RUN mkdir /app

WORKDIR /app

Pár informativní věci

/app # node -v
v16.13.0
/app # npm -v
8.1.4
/app # ssh -T [email protected]
Hi AzaZPPL! You've successfully authenticated, but GitHub does not provide shell access.

package.json

{
    "name": "project",
    "version": "1.0.0",
    "private": true,
    "scripts": {
        "dev": "nuxt",
        "build": "nuxt build",
        "start": "nuxt start",
        "generate": "nuxt generate",
        "generate-schema": "node apollo/generate-schema.js",
        "lint": "eslint --ext .js,.vue --ignore-path .eslintignore .",
        "lintfix": "eslint --fix --ext .js,.vue --ignore-path .eslintignore ."
    },
    "dependencies": {
        "@nuxtjs/apollo": "^4.0.1-rc.4",
        "@nuxtjs/auth": "^4.9.1",
        "@nuxtjs/axios": "^5.12.2",
        "@nuxtjs/dayjs": "^1.2.1",
        "@nuxtjs/style-resources": "^1.0.0",
        "apollo-cache-inmemory": "^1.6.6",
        "copy-to-clipboard": "^3.3.1",
        "core-js": "^3.6.5",
        "date-fns": "^2.19.0",
        "dotenv": "^8.2.0",
        "filepond": "^4.27.1",
        "filepond-plugin-file-validate-type": "^1.2.6",
        "filepond-plugin-image-preview": "^4.6.6",
        "graphql-tag": "^2.11.0",
        "js-file-download": "^0.4.12",
        "jwt-decode": "^3.1.2",
        "lodash": "^4.17.20",
        "nuxt": "^2.14.6",
        "nuxt-buefy": "^0.4.10",
        "nuxt-i18n": "^6.15.4",
        "vee-validate": "^3.4.3",
        "vue": "^2.6.12",
        "vue-filepond": "^6.0.3"
    },
    "devDependencies": {
        "@babel/eslint-parser": "^7.16.3",
        "eslint": "^7.12.1",
        "eslint-config-prettier": "^6.15.0",
        "eslint-loader": "^4.0.2",
        "eslint-plugin-prettier": "^3.1.4",
        "eslint-plugin-vue": "^7.1.0",
        "prettier": "^2.1.2",
        "sass": "^1.32.8",
        "sass-loader": "^12.3.0"
    }
}

Nějaké nápady na to, co se tady děje?

docker git github node.js
2021-11-24 00:41:33
2
1

Zkuste ve vašem Dockerfile nastavit

ENV GIT_SSH_COMMAND='ssh -Tv'

To by vám měl poskytnout další vodítka k tomu, proč váš SSH klíč je nebo není považováno za během npm add.

2021-11-24 08:02:52

Nejlepší odpověď

1

S pomocí @VonC je odpověď, kterou jsem byl schopen přijít na to, co se děje.

Při bližším pohledu na záznamy, zjistil jsem, že tam je vlastně uživatel, tzv. node který se používá při spuštění npm. Uvnitř Dockerfile Alpské obraz tohoto uživatele, byl vytvořen a npm je nakonfigurován pro použití tohoto uživatele.

Takže to, co se stalo, bylo, když jsem přihlášen do docker kontejner byl jsem protokolování v jako root uživatel a všechny ssh klíče, které byly stanoveny v Dockerfile byla řízena root uživatelská.

Běží ssh -T [email protected] pracoval, protože root uživatelská bylo nastavení správně, ale ne node uživatel

To, co jsem stále nemůže dostat hlavu kolem, je proč příkazu v /opt složku práce? Každopádně to je záhada, na jiný den.

Tohle je moje aktualizováno Dockerfile. Jsem nastavit ssh klíče node uživatele a přihlásit se jako node uživatel

FROM node:16.13-alpine

RUN apk add --no-cache openssh-client git

RUN mkdir /app && chown node:node /app

USER node

RUN mkdir -p -m 0700 ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts

RUN ln -s /run/secrets/ssh_key ~/.ssh/id_rsa

WORKDIR /app
2021-11-24 09:02:43

Dobrý úlovek, dobře udělal! Upvoted.
VonC

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................