Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SSH权限被拒绝(公钥、密码)-容器docker ubuntu 18.04_Docker_Ssh - Fatal编程技术网

SSH权限被拒绝(公钥、密码)-容器docker ubuntu 18.04

SSH权限被拒绝(公钥、密码)-容器docker ubuntu 18.04,docker,ssh,Docker,Ssh,我已经在windows 10上安装了Docker,我正在使用WSL1创建dockerfile、构建和运行容器,我无法通过ssh连接,我的权限被拒绝(公钥、密码) 我的dockerfile是: FROM ubuntu:16.04 RUN apt-get update && apt-get install -y openssh-server RUN mkdir /var/run/sshd RUN echo 'root:screencast' | chpasswd RUN sed -i

我已经在windows 10上安装了Docker,我正在使用WSL1创建dockerfile、构建和运行容器,我无法通过ssh连接,我的权限被拒绝(公钥、密码)

我的dockerfile是

FROM ubuntu:16.04
RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:screencast' | chpasswd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
我的docker ps是:

CONTAINER ID   IMAGE     COMMAND               CREATED         STATUS         PORTS                   NAMES
b41411ef7a8a   eg_sshd   "/usr/sbin/sshd -D"   4 minutes ago   Up 4 minutes   0.0.0.0:32768->22/tcp   test_sshd
ssh端口如下所示:

➜ root$ docker port test_sshd 22
0.0.0.0:32768
          
当我试图通过ssh连接时,我得到了“权限被拒绝”

ssh服务已启动

➜ root$ docker exec b41411ef7a8a service ssh status
 * sshd is running

我做错了什么…我不知道。

问题出在这一行:

RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
因为原始行是:

#PermitRootLogin prohibit-password
因此
sed
起作用,但该选项仍被注释掉。毫无疑问,您知道如何解决此问题,但万一解决方案是将
#
添加到匹配的零件:

RUN sed -Ei 's/#(PermitRootLogin).+/\1 yes/' /etc/ssh/sshd_config

顺便说一下,通常不需要容器中的
ssh
服务器就可以进入它。可以使用
docker exec-It sh
或(对于Kubernetes)
kubectl exec-It sh
打开容器内的外壳,谢谢
RUN sed -Ei 's/#(PermitRootLogin).+/\1 yes/' /etc/ssh/sshd_config