2017-05-30 121 views
0

我试图将文件的内容加载到避免在执行生成文件任务期间在执行生成文件任务期间-p调用命令时显示敏感数据(如密码)从生成文件任务中的文件内容生成命令

该命令在没有变量替换的情况下运行。我试图运行一个docker login码头注册表,但理论上这应该是不相关的,我的意思是:下面的方法可以用于任何命令而不仅仅是docker命令。

我想我搞乱了双引号的组合和反引号`或类似的东西,但我不能找到一个办法让这个工作。

到目前为止与此makefile内容的bash/GNU-化妆的组合没有运气:

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" 

我已经尝试不同的东西也是这样的东西:

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

或者这一个使用直接cat命令:

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

但我不断收到不同的错误,如:

  • 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

makefile任务我我正在使用因为我试图避免在命令的输出中显示密码(如在显示more stuff: <THE THING I AM TRYING TO HIDE>echo中),反正即使使用echoeval这样的组合也是如此@eval "echo -e $(REGISTRY_LOGIN_COMMAND)"它仍然不能用于类似的输出错误。

我使用的cygwin用的GNU-make以下版本:

$ 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. 

我在做什么错?

回答

1

如果Make直接运行docker,我看不出用户看到docker命令(及其包含的密码)的方法。

但如果制作构造包含泊坞窗命令,并执行一个脚本,这是另一个故事:

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

谢谢:)我看到一个错误说'./run_docker:第1行是:/ dev/null /:不是目录',但我认为只是一些Windows/cygwin/bash的疯狂,我决定将整个'docker login'命令放入一个bash脚本中,并从'Makefile'任务中调用它' 。/体积/ CONF /搬运工-registry.sh'。当登录成功时,输出中没有显示任何密码,所以现在没问题。在同一个'Makefile'任务中,我也在标记一个图像,然后成功推动它,所以现在都好。我可以稍微调整分隔密码的登录脚本,但没关系。 – TPPZ