You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 20.04下SSH连接Docker容器时密码正确仍遭权限拒绝

问题描述

在Ubuntu 20.04系统中,为单元测试创建可SSH连接的Docker容器,使用以下Dockerfile构建镜像:

# Use a base image with the desired OS (e.g., Ubuntu, Debian, etc.)
FROM ubuntu:latest

# Install SSH server
RUN apt-get update && \
    apt-get upgrade -y
RUN apt-get install openssh-server -y supervisor
RUN apt-get install nano

# Create an SSH user
RUN useradd -rm -d /home/sshuser -s /bin/bash -g root -G sudo -u 1000 sshuser

# Set the SSH user's password (replace "password" with your desired password)
RUN echo 'sshuser:password'

# Allow SSH access
RUN mkdir /var/run/sshd

RUN /usr/bin/ssh-keygen -A

# Expose the SSH port
EXPOSE 22

# Start SSH server on container startup
CMD ["/usr/sbin/sshd", "-D"]

执行命令docker build -t ssh_server .和docker run -d -p 22:22 ssh_server启动容器后,运行ssh sshuser@localhost并输入正确密码,却反复收到“Permission denied, please try again.”错误。该配置在Windows系统可正常运行,完整操作日志如下:

(base) joe@Ubuntu:~/git-repos/datashuttle/tests/ssh_test_images$ docker build -t ssh_server .
[+] Building 1.4s (12/12) FINISHED                               docker:default
 => [internal] load build definition from Dockerfile                       0.0s
 => => transferring dockerfile: 651B                                       0.0s
 => [internal] load metadata for docker.io/library/ubuntu:latest           1.2s
 => [internal] load .dockerignore                                          0.0s
 => => transferring context: 2B                                            0.0s
 => [1/8] FROM docker.io/library/ubuntu:latest@sha256:1b8d8ff4777f36f19bf  0.0s
 => CACHED [2/8] RUN apt-get update &&     apt-get upgrade -y              0.0s
 => CACHED [3/8] RUN apt-get install openssh-server -y supervisor          0.0s
 => CACHED [4/8] RUN apt-get install nano                                  0.0s
 => CACHED [5/8] RUN useradd -rm -d /home/sshuser -s /bin/bash -g root -G  0.0s
 => CACHED [6/8] RUN echo 'sshuser:password'                               0.0s
 => CACHED [7/8] RUN mkdir /var/run/sshd                                   0.0s
 => CACHED [8/8] RUN /usr/bin/ssh-keygen -A                                0.0s
 => exporting to image                                                     0.0s
 => => exporting layers                                                    0.0s
 => => writing image sha256:cc8b8b9f8a500fb399ae7ef2ea7ef0a667706dde81330  0.0s
 => => naming to docker.io/library/ssh_server                              0.0s
(base) joe@Ubuntu:~/git-repos/datashuttle/tests/ssh_test_images$ docker run -d -p 22:22 ssh_server
cf70b859e7c1889d32f0e866697c6d273fb6bde27bb5d9f80de0ae546f5cc6dd
(base) joe@Ubuntu:~/git-repos/datashuttle/tests/ssh_test_images$ ssh sshuser@localhost
sshuser@localhost's password: 
Permission denied, please try again.
问题排查与解决

核心原因

  1. 密码未实际生效:原Dockerfile中仅用echo 'sshuser:password'输出字符串,没有通过管道传给chpasswd命令,导致用户密码未被设置。
  2. SSH密码登录被禁用:Ubuntu最新镜像的SSH配置默认可能关闭了密码认证,需要手动开启。

修复后的Dockerfile

# 使用Ubuntu基础镜像
FROM ubuntu:latest

# 更新系统并安装依赖,同时清理缓存减小镜像体积
RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y openssh-server supervisor nano && \
    rm -rf /var/lib/apt/lists/*

# 创建SSH用户并加入sudo组
RUN useradd -rm -d /home/sshuser -s /bin/bash -g root -G sudo -u 1000 sshuser

# 正确设置用户密码:将echo输出传给chpasswd完成密码写入
RUN echo 'sshuser:password' | chpasswd

# 修改SSH配置,允许密码登录
RUN sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config && \
    sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config

# 创建sshd运行所需目录
RUN mkdir /var/run/sshd

# 生成SSH主机密钥
RUN /usr/bin/ssh-keygen -A

# 暴露SSH端口
EXPOSE 22

# 启动SSH服务
CMD ["/usr/sbin/sshd", "-D"]

额外注意事项

  • 端口冲突处理:如果宿主机Ubuntu本身运行了SSH服务(默认占用22端口),启动容器时会映射失败。可改为docker run -d -p 2222:22 ssh_server,然后通过ssh sshuser@localhost -p 2222连接。
  • 清理构建缓存:之前的错误镜像已被缓存,需执行docker build --no-cache -t ssh_server .重新构建,确保修改生效。

内容的提问来源于stack exchange,提问作者Joseph

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 20:43:16