docker镜像中的ssh凭据

时间:2019-06-13 19:29:54

标签: node.js docker ssh docker-compose

我有一个与docker-compose up一起正常运行的应用程序。该应用程序使用SSH连接到我的主机并执行一些命令。现在,我通过将SSH凭据写入源代码中来提供SSH凭据,如下所示:

const pass = 'mypassword';
let username = 'myusername';
let host = '172.17.0.1';

我正在尝试遵循this指南,以便以更好的方式提供凭据。我无法理解此行的工作方式privateKey: require('fs').readFileSync('/here/is/my/key')是相对路径,“密钥”是密码为纯文本的文件吗?我应该从主机上提供些什么吗?如何在Docker容器中提供凭据?

1 个答案:

答案 0 :(得分:1)

通常,要将参数传递到要由Node.js脚本读取的容器中,您可以:

对于诸如SSH凭据之类的秘密数据,我会建议使用参数或环境变量,因为可以从各种来源检查它们。本文很好地说明了原因:https://diogomonica.com/2017/03/27/why-you-shouldnt-use-env-variables-for-secret-data/

相反,我将创建一个简单的配置文件,您的Node.js脚本可以读取。

{
   "username": "myuser",
   "password": "pass",
   "host": "172.17.0.1",
   ...
}

您可以在主机系统上将此文件放置在目录中,并在启动容器时将其放在/myvolume下的目录中:

docker run -it -v host-directory:/myvolume myimage

您的Node.js脚本现在可以读取JSON文件:

const configFilePath = "/myvolume/secret-config.json"
const config = JSON.parse(fs.readFileSync(configFilePath));

// now you can use config.host, config.username and config.password

作为旁注:由于密码通常不太安全,因此建议将远程SSH服务器设置为使用私钥/公钥身份验证。设置私钥/公钥身份验证后,可以将私钥文件放在相同的卷中,并以类似的方式从Node.js脚本中加载它:)