使用scp

时间:2019-09-13 07:05:24

标签: docker ssh containers scp

我已经使用高山映像创建了两个名为服务器和客户端的docker容器,并且我正在运行这两个容器。 然后我在两个容器中都安装了“ apk add openssh”和“ apk add openrc”。 使用“ rc-service sshd start”,我已经启动了ssh服务。 现在,我要使用“ scp”复制文件。

从服务器容器中键入: scp myfile.txt client@172.17.0.3:/ location_of_the_folder

询问客户端容器的密码。 我能做什么? Docker容器的默认密码是什么?

我尝试了以下3种选择:

  1. 将相同的体积分配到两个容器中。
  2. 使用“ docker cp”从服务器容器到主机,然后主机到 客户端容器。
  3. 在服务器容器中使用ssh-keygen并复制id_rsa.pub 手动键入clint容器的/root/.ssh目录即可。

我不想使用选项1和2。 我应该使用Shell脚本为选项3做什么?我想使这件事自动化。 我可以手动执行操作,但是可以通过使用Shell脚本自动执行操作来将一些文本从一个容器复制到另一个容器吗?

2 个答案:

答案 0 :(得分:0)

如果您确实需要ssh,请在正在运行的容器中尝试以下步骤:

  1. 编辑/etc/ssh/sshd_config,取消注释以PermitRootLogin开头的行,然后更改为:PermitRootLogin yes
  2. 重新启动sshd服务:# rc-service-sshd restart
  3. 将密码添加到root:# passwd

然后按照您的操作从其他容器进行连接。

docker cp的另一个选项是here

答案 1 :(得分:0)

通常,Docker Linux分发基础映像会为所有用户禁用所有密码。另外,您要描述的设置具有很多凭据要管理(在每个映像中,本地用户的密码,远程用户的密码,您自己的ssh主机密钥,远程ssh主机密钥),并且安全地进行此操作很棘手。 (例如,如果您在Dockerfile中设置了密码,那么拥有该图片的任何人都可以从docker history中读取该密码,或者尝试从该图片的/etc/shadow文件中破解散列密码。 )

我建议避免在Docker中使用ssh。它避免了上面显示的凭据问题,也避免了在容器中运行多个进程的固有困难。

这里最简单的方法是将端点添加到可以生成文件内容的“服务器”,并让“客户端”在启动时或需要时请求它。

您还可以将相同名称的Docker卷或主机目录安装到两个容器中,并且这两个容器都将对同一文件具有读写访问权限,因此您可以通过这种方式传输文件。通常不必担心,但是存在潜在的竞争条件(就像您在没有Docker的同一系统上运行两个系统一样)。这种方法也不适用于Docker Swarm或Kubernetes等多主机安装。