使用SSH服务器安装Docker容器?
我想设置一个具有以下功能的非常简约的alpine linux 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
- 它运行一个ssh服务器
- 它通过我选择的SSH公钥进行复制,然后我可以对其进行身份验证
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密钥,将它们公开在卷中,这就是我执行此命令的原因:SSH-keygen-A
ln-s/etc/ssh/ssh\u host\u ed25519\u key.pub/root/.ssh/authorized\u key
- 因为这只是一个Ansible节点集群实验室,所以我以
用户的身份对这台机器进行SSH,这就是为什么我需要一个非常不安全的root
echo“root:root”| chpasswd
/usr/sbin/sshd-D-ddd
,以查看是否可以提供任何有用的信息。