我将docker用于MacOS / Win。
我通过ssh从docker容器中的shell通过ssh连接到外部服务器
现在,我在docker shell中生成ssh-key,然后手动将sshkey发送到服务器。
但是,在这种方法中,每次我重新构建容器时,都会删除sshkey。
所以我想在构建图像时设置初始sshkey。
我有2个想法
将.ssh文件夹从我的macOS挂载到docker文件夹并永久保存。 (权限控制可能很困难而且很复杂。。。)
编写脚本以创建ssh-keymake并将其发送到docker-compose.yml或Dockerfile中的服务器。 (每次构建时,都会发送新密钥... ??)
哪种是最佳做法?还是您有任何自动设置ssh-key的想法?
答案 0 :(得分:1)
最佳实践通常是不从容器建立出站ssh连接。如果您要添加到容器中的是二进制代码或应用程序代码,请在Docker外部管理源代码控制设置,然后将数据复制到映像中。如果您的应用需要运行数据,请再次从外部获取它,然后使用docker run -v
将其注入到容器中。
正如您所说,安全地管理此关键材料并遵守ssh的Unix许可要求是非常棘手的。如果真的别无选择,只能编写一个ENTRYPOINT脚本,该脚本将私钥从绑定安装的卷复制到容器用户的.ssh
目录中。但是我的首选是重新设计我的应用程序流程,根本不需要它。
答案 1 :(得分:0)
在阅读“我是Windows用户..”后,我认为您正在解决错误的问题。您正在寻找对服务器的简单(健全)shell访问。这是两个更简单的解决方案。 1. Windows Linux子系统-https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux。 (不是我的选择)
我如何安装它。
下载并安装它(请小心,仅选择所需基础之外的功能。(有很多,并且您不需要的大多数功能,例如编译器和X)。请确保使用SSH已选中。不用担心,您可以根据需要重新运行设置多次(我有时会这样做以更新使用的内容)
启动bash shell(安装后会有一个链接) 一种。运行'cygpath -wp $ PATH' b。查看结果-路径开头会有几个文件夹,看起来像“ C:\ cygwin \ bin; C:\ cygwin \ usr \ local \ bin; ...”,只是所有路径以“ C:\ cygwin”开头的目录,前提是您将Cygwin安装到“ C:\ Cygwin”目录中。 C。将这些路径添加到系统路径 d。启动新的CMD实例。运行'ls',它现在应该可以直接在Windows Shell下运行。
额外功劳。
a。将在第一次启动外壳程序时在C:\ cygwin \ home \ <用户名>目录中创建的所有“ .xxx”文件移动到Windows主目录(C:\ Users \ <用户名>)。>
b。退出您正在运行的所有bash shell
c。删除c:\ cygwin \ home目录
d。使用Windows mklink实用工具在cygwin下创建一个名为home的链接,指向C:\ Users(管理员外壳程序)'mklink / J C:\ Cygwin \ home C:\ Users' 这将使Windows主目录与cygwin主目录相同。之后,按照Cygwin bash下ssh的常规设置,您将能够生成密钥并将其正常分发给服务器。
注意:您将不得不切断凭据从Windows到您的
享受-有时候,我不得不着眼睛记得我在窗户上...