Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SSH服务器安装Docker容器?_Docker_Ssh_Containers_Alpine_Sshd - Fatal编程技术网

使用SSH服务器安装Docker容器?

使用SSH服务器安装Docker容器?,docker,ssh,containers,alpine,sshd,Docker,Ssh,Containers,Alpine,Sshd,我想设置一个具有以下功能的非常简约的alpine linux docker容器: 它运行一个ssh服务器 它通过我选择的SSH公钥进行复制,然后我可以对其进行身份验证 我研究了各种选择,最后决定编写自己的小Dockerfile。 然而,我遇到了一些问题 Dockerfile FROM alpine:latest RUN apk update RUN apk upgrade RUN apk add openssh-server RUN mkdir -p /var/run/sshd RUN

我想设置一个具有以下功能的非常简约的alpine linux docker容器:

  • 它运行一个ssh服务器
  • 它通过我选择的SSH公钥进行复制,然后我可以对其进行身份验证
我研究了各种选择,最后决定编写自己的小Dockerfile。 然而,我遇到了一些问题

Dockerfile

FROM alpine:latest

RUN apk update
RUN apk upgrade
RUN apk add openssh-server

RUN mkdir -p /var/run/sshd
RUN mkdir -p /root/.ssh

ADD authorized_keys /root/.ssh/authorized_keys
ADD entrypoint.sh /entrypoint.sh
RUN chmod 755 /entrypoint.sh

EXPOSE 22
CMD ["/entrypoint.sh"]
entrypoint.sh

#!/bin/sh
/usr/sbin/sshd -D
授权密钥

ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBP8cIHIPgV9QoAaSsYNGHktiP/QnWfKPOeyzjujUXgQMQLBw3jJ1EBe04Lk3FXTMxwrKk3Dxq0VhJ+Od6UwzPDg=
启动容器会出现错误:
sshd:没有可用的主机密钥--正在退出

如何修复Dockerfile,以确保ssh服务器正确运行,并且授权的密钥文件在那里。我缺少什么?

为了启动,SSH守护进程确实需要主机密钥。
这些并不表示要用于连接到容器的键,只表示定义此特定主机的键

主机密钥是用于验证中的计算机的加密密钥

资料来源:

因此,您必须为主机生成一些密钥,如果您不打算使用这些密钥,则可以安全地忽略它们

生成这些密钥可以通过

ssh-keygen-A
因此,在您的图像中,只需添加一个

运行ssh-keygen-A
应该这样做


为了记录在案,这里是我自己的
sshd
Alpine图像:

来自阿尔卑斯山的

运行apk add--无缓存\
openssh\
&&ssh-keygen-A\
&&mkdir/root/.ssh\
&&chmod 0700/root/.ssh\
&&echo“root:root”| chpasswd\
&&ln-s/etc/ssh/ssh\u host\u ed25519\u key.pub/root/.ssh/authorized\u key
暴露22
CMD[“/usr/sbin/sshd”、“-D”、“-e”]
额外注释

  • 我正在重用由
    SSH-keygen-A
    生成的SSH密钥,将它们公开在卷中,这就是我执行此命令的原因:
    ln-s/etc/ssh/ssh\u host\u ed25519\u key.pub/root/.ssh/authorized\u key
    
  • 因为这只是一个Ansible节点集群实验室,所以我以
    root
    用户的身份对这台机器进行SSH,这就是为什么我需要一个非常不安全的
    echo“root:root”| chpasswd
    

您可以尝试使用调试标志启动sshd:
/usr/sbin/sshd-D-ddd
,以查看是否可以提供任何有用的信息。