docker启动sshd报错Could not load host key: /etc/ssh/ssh_host_rsa_key和Permissions 0640 for ‘/etc/ssh/ssh_

本文详细记录了解决Docker容器中启动SSH服务时遇到的两个常见错误:缺少SSH主机密钥文件及文件权限过高。通过从宿主机复制密钥文件至容器并调整文件权限至600,成功启动了SSH服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

启动sshd报错

第一个错误,docker容器启动sshd没有文件

[root@3ca6bba2a824 yum.repos.d]# /usr/sbin/sshd               
Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Could not load host key: /etc/ssh/ssh_host_ed25519_key
sshd: no hostkeys available -- exiting.

只需要从宿主机把这个三个文件cp到容器内就可以解决

[root@zheng ssh]# docker cp /etc/ssh/ssh_host_rsa_key 3ca6bba2a824:/etc/ssh/
[root@zheng ssh]# docker cp /etc/ssh/ssh_host_ecdsa_key 3ca6bba2a824:/etc/ssh/
[root@zheng ssh]# docker cp /etc/ssh/ssh_host_ed25519_key 3ca6bba2a824:/etc/ssh/

再从容器启动sshd还是报错

第二个错误,文件权限错误,复制过来的权限太高了

[root@3ca6bba2a824 ansible]# /usr/sbin/sshd
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0640 for '/etc/ssh/ssh_host_rsa_key' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
key_load_private: bad permissions
Could not load host key: /etc/ssh/ssh_host_rsa_key
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0640 for '/etc/ssh/ssh_host_ecdsa_key' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
key_load_private: bad permissions
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0640 for '/etc/ssh/ssh_host_ed25519_key' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
key_load_private: bad permissions
Could not load host key: /etc/ssh/ssh_host_ed25519_key
sshd: no hostkeys available -- exiting.

修改一下这三个文件的权限,改成600
然后查询一下进程和端口确认

[root@3ca6bba2a824 ssh]# chmod 600 ssh_host_ecdsa_key
[root@3ca6bba2a824 ssh]# chmod 600 ssh_host_ed25519_key
[root@3ca6bba2a824 ssh]# chmod 600 ssh_host_rsa_key
[root@3ca6bba2a824 ssh]# /usr/sbin/sshd

[root@3ca6bba2a824 ssh]# ps -ef |grep sshd
root        212      0  0 07:49 ?        00:00:00 /usr/sbin/sshd
root        214    193  0 07:50 pts/3    00:00:00 grep --color=auto sshd

看到了22端口
[root@3ca6bba2a824 ssh]#  netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      212/sshd            
tcp6       0      0 :::22                   :::*                    LISTEN      212/sshd   

解决成功

### 更新 SSH 主机密钥文件的正确方法 SSH 主机密钥用于验证服务器身份[^4]。当客户端首次连接到 SSH 服务器时,服务器会将其公钥发送给客户端,客户端将此公钥保存在 `~/.ssh/known_hosts` 文件中。如果主机密钥发生变化,客户端会提示可能存在安全风险。因此,在更新 SSH 主机密钥时,应确保使用安全且兼容的加密算法,并避免因格式或权限问题导致服务无法启动。 #### 使用推荐的加密算法生成密钥 OpenSSH 官方推荐使用 ECDSA 或 Ed25519 算法生成新的 SSH 主机密钥,因为它们提供了更强的安全性更好的性能表现。以下命令可用于生成新密钥: ```bash sudo ssh-keygen -t ecdsa -P '' -f /etc/ssh/ssh_host_ecdsa_key sudo ssh-keygen -t ed25519 -P '' -f /etc/ssh/ssh_host_ed25519_key ``` 上述命令使用空密码(`-P ''`)快速生成密钥,适用于大多数服务器环境。若需兼容旧系统,可额外生成 RSA 密钥作为补充: ```bash sudo ssh-keygen -t rsa -P '' -f /etc/ssh/ssh_host_rsa_key ``` #### 替换旧密钥并重启服务 完成密钥生成后,需要将新密钥文件替换 `/etc/ssh/` 目录下的旧文件。确保文件权限设置为 `root:root`,且权限模式为 `600`: ```bash sudo chown root:root /etc/ssh/ssh_host_* sudo chmod 600 /etc/ssh/ssh_host_* ``` 随后重启 SSH 服务以加载新密钥: ```bash sudo systemctl restart sshd ``` 若服务启动失败,检查日志中是否出现类似 `Could not load host key` 的错误,并确认密钥文件格式路径正确[^3]。 #### 在容器环境中更新 SSH 主机密钥 对于运行在 Docker 容器中的 SSH 服务,若容器内缺少必要的主机密钥,可以从宿主机复制现有密钥至容器内部: ```bash docker cp /etc/ssh/ssh_host_rsa_key <container_id>:/etc/ssh/ docker cp /etc/ssh/ssh_host_ecdsa_key <container_id>:/etc/ssh/ docker cp /etc/ssh/ssh_host_ed25519_key <container_id>:/etc/ssh/ ``` 确保容器内的 SSH 配置文件指向正确的密钥路径,并重新启动容器内的 SSH 服务[^1]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值