NPM ajouter de privé repo échoue avec l'autorisation refusée lorsque c'est à partir d'un projet existant

0

La question

J'ai essayé de déboguer ce super bizarre problème. A un projet pour lequel je suis en train d'installer un repository privé avec l' npm commande.

Cela ne fonctionne pas quand il est dans un projet existant, mais quand c'est un nouveau projet qui vient d'être créé avec npm init.

Le projet existant dans /app et un nouveau projet est en /opt (pour les tests)

L'exécution de npm add git+ssh://[email protected]:company/repository.git dans /app de retour avec:

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

Fonctionnant exactement de la même commande à partir de la /opt projet installe le package correctement sans aucun problème.

Je suis en cours d'exécution à partir d'une alpine docker boîte avec openssh installé.

C'est le 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

Un peu plus informatif trucs

/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"
    }
}

Toutes les idées de ce qui se passe ici?

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

Essayez dans votre Dockerfile à définir

ENV GIT_SSH_COMMAND='ssh -Tv'

Cela devrait vous donner plus d'indices quant à pourquoi votre clé SSH est ou n'est pas considéré au cours de npm add.

2021-11-24 08:02:52

La meilleure réponse

1

Avec l'aide de @VonC la réponse que j'ai été capable de comprendre ce qui se passait.

Regardons de plus près les journaux, j'ai trouvé qu'il n'y est en réalité un utilisateur appelé node qui est utilisé lors de l'exécution de npm. À l'intérieur de la Dockerfile de l'Alpine image cet utilisateur a été créé et npm est configuré pour utiliser cet utilisateur.

Donc ce qui s'est passé a chaque fois que je suis connecté sur le conteneur docker j'étais connecter en tant que l' root de l'utilisateur et de toutes les clefs ssh qui ont été fixés dans le Dockerfile ont été en cours d'exécution par le root de l'utilisateur.

L'exécution de l' ssh -T [email protected] a cause de la root l'utilisateur a été configuré correctement, mais pas le node l'utilisateur

Ce que je ne peux pas obtenir ma tête autour de, c'est pourquoi l'exécution de la commande dans le /opt dossier de travail? De toute façon c'est un mystère pour un autre jour.

C'est mon jour Dockerfile. J'ai mis les clés ssh à l' node d'utilisateur et de vous connecter en tant que node l'utilisateur

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

Bonne prise, bien fait! Upvoted.
VonC

Dans d'autres langues

Cette page est dans d'autres langues

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