无法通过 ssh 进入 docker 容器

无法通过 ssh 进入 docker 容器

假设我有以下 Dockerfile:

FROM php:7.4

RUN apt-get install -y openssh-server \
    && mkdir /var/run/sshd \
    && echo 'root:root' | chpasswd \
    && sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config \
    && service ssh start

我按照这个 Dockerfile 创建了一个 Docker 实例:

docker build -t test .
docker run -t -d --privileged test bash
docker exec -it {whatever} bash

此后,我尝试通过 SSH 进入机器,但是不起作用:

root@5e3395ae4b64:/# ssh 127.0.0.1
ssh: connect to host 127.0.0.1 port 22: Connection refused

如果我service ssh start再次这样做,它会起作用,但我不知道为什么我需要这样做,因为我已经在 Dockerfile 中这样做了。

无论如何,在我这样做之后service ssh start,密码验证不起作用:

The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:hQcDdJFTmCZvhJzWbbis5OvCiqx1eagG0b6SD83GbJo.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '127.0.0.1' (ECDSA) to the list of known hosts.
[email protected]'s password:
Permission denied, please try again.
[email protected]'s password:

(我手动输入了root作为密码)

有任何想法吗?

答案1

我认为 root shell 已被禁用。你可以在

cat /etc/passwd

如果可以访问的话。尝试一下,然后告诉我是否有 root 用户的 shell。

那么你可以测试一下

netstat -an | grep 22

查看 sshd 正在监听哪些主机。如果你没有看到 127.0.0.1

尝试看看是否在/etc/ssh/sshd_config您正在使用允许用户指令优先于允许Root登录

看看你的 DockerFile 的这一行是否应用到你的文件中:

sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

答案2

我最终通过创建一个新用户来实现这个功能:

    && useradd --create-home --base-dir /home newuser \
    && echo "newuser:newuser" | chpasswd \

相关内容