Can';t在docker中ssh localhost
我通过这样的dockerfile:Can';t在docker中ssh localhost,docker,ssh,Docker,Ssh,我通过这样的dockerfile:docker build-t debian ssh:v00启用ssh来构建docker映像。 From debian WORKDIR / RUN apt update && apt install -y openssh-server sudo RUN sed -i "s/UsePAM yes/UsePAM no/g" /etc/ssh/sshd_config RUN echo "root:123456" |
docker build-t debian ssh:v00启用ssh来构建docker映像。
From debian
WORKDIR /
RUN apt update && apt install -y openssh-server sudo
RUN sed -i "s/UsePAM yes/UsePAM no/g" /etc/ssh/sshd_config
RUN echo "root:123456" | chpasswd
RUN echo "root ALL=(ALL) ALL" >> /etc/sudoers
# RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
# RUN ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
# RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN mkdir /run/sshd
# RUN mkdir /var/run/sshd
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
构建之后,我通过docker run-d——名称ssh00 debian-ssh00
启动容器。然后,docker exec-it ssh00 bash
->ssh localhost
,它会给我一个消息:
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:sF5hbx2GTw/Fq3QhQyRJ2+YNwBFPy/Iu5c8PtgpU/ok.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
root@localhost's password:
Permission denied, please try again.
root@localhost's password:
Permission denied, please try again.
root@localhost's password:
root@localhost: Permission denied (publickey,password).
我在上面键入密码123456
。为什么会这样
我使用最新版本的docker for windows,即docker engine v20.10.2,但仍使用后端hyper-V
更新:有一个关于2020年的官方教程。但是现在不鼓励这样做。首先,在Docker bash会话中,尝试(再次)更改根密码:它将要求您输入旧密码(您在Docker文件中输入的密码)。
这样,您可以再次检查默认容器帐户(此处
root
)是否确实具有密码“123456”
其次,在详细模式下尝试相同的ssh命令,以查看是否有明显的线索:
ssh -vv localhost
如果root的密码正确,则检查您:如果它具有权限登录号
,则将不允许任何root会话
如果这样做有效,您需要修改Dockerfile以修改/etc/ssh/sshd\u config
委员会确认:
运行echo“permitrotlogin yes”>/etc/ssh/sshd\u config
将使基于debian的容器工作
这纯粹是sshd守护程序问题的配置。默认情况下,出于安全原因,禁用通过密码身份验证访问根帐户,因此您有两个选项:
ssh localhost
您可以在docker文件中添加一行,该行生成公钥/私钥对,并将其添加到根用户的授权密钥中,也可以在首次使用docker exec命令登录后运行此命令
更改的Dockerfile(公钥/私钥版本)
或者在bash中执行后在容器中运行该命令
ssh-keygen -b 2048 -t rsa -f /root/.ssh/id_rsa -q -N "" && cat /root/.ssh/id_rsa.pub>/root/.ssh/authorized_keys
更新:
您正在使用sed,但sed不可用,因此对于初学者,您需要使用apt添加sed,如果您想使用Permitrotlogin yes构建此容器,则需要使用sed更改/etc/ssh/sshd_配置文件。
您更改的Dockerfile(允许root密码登录)
我希望这能完全解决您的问题。我尝试了两种方法,但仍然失败。我已经更新了结果。
passwd
只要求输入新密码。@Spaceship222“passwd只要求输入新密码”:好的,至少它让您有机会输入一个简单的密码并立即测试它。输入新密码“123456”后,密码实际上是“123456”,还是具有更复杂的字符(可能是特殊字符)“,它仍然无法ssh localhost
@spaceship 222好的,我只是用一个附加参数编辑了答案供您检查。我同意:ssh到容器不是一个好的做法。但是在您最初的问题的上下文中,这个答案对于调试ssh连接问题仍然很有意义。@Vonc为什么ssh到容器不是一个好问题?”d实践?它一直被认为是一种反模式,因为它拓宽了容器的攻击面。它打开了一个更多的访问条目,这通常是不需要的(因为您有docker exec
).参见或。在反模式方面:我知道这种方法。但是如果您希望ssh从外部连接到容器,则必须将公钥附加到外部每个新主机的授权密钥中。我已更新了Dockerfile,准备使用Permitrotlogin yes值构建您的容器,因此您有两个以上的Dockerfile,一个具有公钥/私钥身份验证,另一个具有其次是密码认证。
ssh-keygen -b 2048 -t rsa -f /root/.ssh/id_rsa -q -N "" && cat /root/.ssh/id_rsa.pub>/root/.ssh/authorized_keys
FROM Debian
WORKDIR /
RUN apt update && apt install -y openssh-server sudo sed
RUN sed -i "s/UsePAM yes/UsePAM no/g" /etc/ssh/sshd_config && sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/g" /etc/ssh/sshd_config
RUN echo "root:123456" | chpasswd
RUN echo "root ALL=(ALL) ALL" >> /etc/sudoers
# RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
# RUN ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
# RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN mkdir /run/sshd
# RUN mkdir /var/run/sshd
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]