首页 > 解决方案 > docker 映像中的 ssh 凭据

问题描述

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

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

我正在尝试遵循指南,以便以更好的方式提供凭据。我不明白这一行privateKey: require('fs').readFileSync('/here/is/my/key')是如何工作的它是一个相对路径,“密钥”是一个密码为纯文本的文件吗?我应该从我的主机上提供什么东西吗?如何在 docker 容器中提供凭据?

标签: node.jsdockersshdocker-compose

解决方案


通常,要将参数传递到 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 脚本中加载它:)


推荐阅读