2017-05-30 1 views
0

J'essaie de charger le contenu d'un fichier à pour éviter d'afficher des données sensibles comme des mots de passe en invoquant une commande avec -p lors d'une exécution de tâche makefile.Créer une commande à partir du contenu du fichier dans le fichier makefile

La commande fonctionne lorsqu'elle est exécutée sans remplacement de variable. J'essaye d'exécuter un docker login à un registre de docker, mais en théorie ceci ne devrait pas être pertinent, je veux dire: l'approche ci-dessous pourrait être employée avec n'importe quelle commande pas simplement la commande docker.

Je pense que je suis de déconner avec la combinaison de doubles guillemets " et apostrophes ` ou quelque chose comme ça, mais je ne peux pas trouver un moyen d'obtenir ce travail.

Jusqu'à présent pas de chance avec ce contenu makefile comme une combinaison de bash/gnu-faire:

REGISTRY_PSW_FILE=./volume/conf/docker-registry.conf 
REGISTRY_PSW=`cat $(REGISTRY_PSW_FILE)` 
REGISTRY_LOGIN_COMMAND=docker login my-own-registry.something.com -u myRegistryUsr -p $(REGISTRY_PSW) 

docker-push: 
    @echo -e "\n\n\nPushing the docker image to the registry" 
    @echo -e "stuff: $(REGISTRY_PSW)" 
    @echo -e "more stuff: $(REGISTRY_LOGIN_COMMAND)" 
    $(REGISTRY_LOGIN_COMMAND) 
    @echo "DONE" 

J'ai essayé différentes choses aussi des choses comme:

REGISTRY_LOGIN_COMMAND=`docker login my-own-registry.something.com -u myRegistryUsr -p $(REGISTRY_PSW)` 

Ou celui-ci en utilisant directement la commande cat:

REGISTRY_LOGIN_COMMAND=docker login my-own-registry.something.com -u myRegistryUsr -p `cat $(REGISTRY_PSW_FILE)` 

Mais je continue à recevoir différentes erreurs comme:

  • flag needs an argument: 'p' in -p \n See 'docker login --help'.
  • Error response from daemon: login attempt to https://my-own-registry.something.com/v2 failed with status: 401 Unauthorized

Dans la makefile tâche que je utilise $(REGISTRY_LOGIN_COMMAND) tout de suite (et pas une combinaison de eval + echo) parce que j'essaie d'éviter d'afficher le mot de passe dans la sortie de la commande (comme dans le echo qui montre more stuff: <THE THING I AM TRYING TO HIDE>), de toute façon même en utilisant une combinaison de echo et eval comme ceci @eval "echo -e $(REGISTRY_LOGIN_COMMAND)" il ne fonctionne toujours pas avec des erreurs de sortie similaires.

J'utilise Cygwin avec la version suivante de gnu-faire:

$ make -v 
GNU Make 4.2.1 
Built for x86_64-unknown-cygwin 
Copyright (C) 1988-2016 Free Software Foundation, Inc. 
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> 
This is free software: you are free to change and redistribute it. 
There is NO WARRANTY, to the extent permitted by law. 

Qu'est-ce que je fais mal?

Répondre

1

Je ne vois aucun moyen d'empêcher l'utilisateur de voir la commande docker (et le mot de passe qu'il contient), si Make exécute le docker directement.

Mais si Make construit un script contenant la commande docker, et l'exécute, c'est une autre histoire:

DOCKER_SCRIPT = run_docker 

docker-push: 
    sed -e 's/^/docker login my-own-registry.something.com -u myRegistryUsr -p /' -e 's|$$| >/dev/null/|' $(REGISTRY_PSW_FILE) > $(DOCKER_SCRIPT) 
    chmod +x $(DOCKER_SCRIPT) 
    ./$(DOCKER_SCRIPT) 
+0

Merci :) Je vois une erreur disant './run_docker: ligne 1:/dev/null /: Pas un répertoire, mais je pense que c'est juste une folie Windows/cygwin/bash que j'ai décidé de contourner en plaçant toute la commande 'docker login' dans un script bash et en l'appelant depuis la tâche' Makefile' comme '/volume/conf/docker-registry.sh'. Lorsque la connexion est réussie, cela ne montre aucun mot de passe dans la sortie, donc pour l'instant c'est bien. Dans la même tâche 'Makefile', je suis également en train de baliser une image, puis de la pousser avec succès, donc tout va bien pour le moment. Je peux modifier un peu le script de connexion qui sépare le mot de passe mais ça va. – TPPZ