![SSH 主机密钥对需要密码,导致 ProFTPD 失败](https://linux22.com/image/729659/SSH%20%E4%B8%BB%E6%9C%BA%E5%AF%86%E9%92%A5%E5%AF%B9%E9%9C%80%E8%A6%81%E5%AF%86%E7%A0%81%EF%BC%8C%E5%AF%BC%E8%87%B4%20ProFTPD%20%E5%A4%B1%E8%B4%A5.png)
我需要使用 ProFTPD 创建一个 docker 镜像并将其用作 SFTP 服务器。
显然,我需要 SSH 主机密钥才能工作,但我不想每次构建镜像时都创建新密钥。
如果我使用以下命令创建 SSH 主机密钥:
ssh-keygen -f /etc/ssh/ssh_host_rsa_key -N '' -t rsa
ssh-keygen -f /etc/ssh/ssh_host_dsa_key -N '' -t dsa
在正在运行的容器内无需提供密码即可完美运行。
我只需使用proftpd
命令即可启动我的 SFTP 服务器。
COPY
但是,在我的主机上以完全相同的方式生成密钥,然后使用指令将其复制到 docker 镜像中,Dockerfile
在尝试在容器中启动 ProFTPD 时会导致以下错误:
Wrong passphrase for this key. Please try again.
Wrong passphrase for this key. Please try again.
Wrong passphrase for this key. Please try again.
2018-11-13 11:48:21,196 2771999b0891 proftpd[53924] 2771999b0891: mod_sftp/1.0.0: error reading passphrase for SFTPHostKey '/etc/ssh/ssh_host_rsa_key': (unknown)
2018-11-13 11:48:21,197 2771999b0891 proftpd[53924] 2771999b0891: mod_sftp/1.0.0: unable to use key in SFTPHostKey '/etc/ssh/ssh_host_rsa_key', exiting
我在这里遗漏了什么?
编辑:根据要求的 Dockerfile:
FROM alpine:latest
COPY etc/apk/repositories /etc/apk/repositories
COPY etc/ssh/ /etc/ssh/
COPY etc/proftpd/ /etc/proftpd/
RUN apk upgrade --no-cache
RUN apk add --no-cache \
proftpd \
proftpd-mod_sql_postgres \
proftpd-mod_sftp_sql
ENTRYPOINT proftpd
/etc/ssh
容器内的内容如下:
>>ls -la /etc/ssh
total 28
drwxr-xr-x 1 root root 4096 Nov 13 13:47 .
drwxr-xr-x 1 root root 4096 Nov 13 13:46 ..
-rw------- 1 root root 1393 Nov 13 13:57 ssh_host_dsa_key
-rw-r--r-- 1 root root 609 Nov 13 10:11 ssh_host_dsa_key.pub
-rw------- 1 root root 1831 Nov 13 13:57 ssh_host_rsa_key
-rw-r--r-- 1 root root 401 Nov 13 10:11 ssh_host_rsa_key.pub
-rw-r--r-- 1 root root 3177 Nov 7 18:21 sshd_config
答案1
我认为这可能是因为默认加密级别不同。如果您在所有情况下都声明了字节数,我认为问题就不会出现。
就像说:
ssh-keygen -f /etc/ssh/ssh_host_rsa_key -N '' -t rsa -b 1024
vs
ssh-keygen -f /etc/ssh/ssh_host_rsa_key -N '' -t rsa -b 2048
vs
ssh-keygen -f /etc/ssh/ssh_host_rsa_key -N '' -t rsa -b 4096
答案2
事实证明,无论出于什么原因,在 MacOS 主机上生成的密钥都导致了此问题。
但在 Linux 主机上生成的密钥按预期工作 - 意外请求的密码短语没有问题。
我不确定为什么会发生这种情况,但这种情况是可以重现的。我认为无论操作系统如何,DSA 和 RSA 密钥都是兼容的。
如果有人能找到更完整的解释,我将不胜感激,但对我来说,问题已经解决了 - 尽管解决方案只是一种解决方法,没有正确理解问题。