docker sshd image problem, session required pam_loginuid.so, cann't login

在使用sshd docker 镜像时, 发现一个比较诡异的问题, 有些启动的容器可以连接, 有些不能.

例如 :

启动2个容器(这两个容器都有问题) :

[[email protected] ~]# docker run -d --name di digoal/sshd_ceph:giant

[[email protected] ~]# docker run -d --name da digoal/sshd

这两个容器的CMD如下 :

[[email protected] ~]# docker inspect -f ‘{{.Config.Cmd}}‘ da

[/usr/sbin/sshd -D]

[[email protected] ~]# docker inspect -f ‘{{.Config.Cmd}}‘ di

[/usr/sbin/sshd -D]

查看他们的IP

[[email protected] ~]# docker inspect -f ‘{{.NetworkSettings.IPAddress}}‘ di

172.17.0.7

[[email protected] ~]# docker inspect -f ‘{{.NetworkSettings.IPAddress}}‘ da

172.17.0.8

使用ssh客户端连接, 被拒绝.

[[email protected] ~]# ssh 172.17.0.8

[email protected]‘s password:

Last login: Tue Dec 16 20:22:12 2014 from 172.17.42.1

Connection to 172.17.0.8 closed.

[[email protected] ~]# ssh 172.17.0.7

[email protected]‘s password:

Last login: Tue Dec 16 20:21:58 2014 from 172.17.42.1

Connection to 172.17.0.7 closed.

排错, 先删除这两个容器 :

[[email protected] ~]# docker stop di

di

[[email protected] ~]# docker stop da

da

[[email protected] ~]# docker rm da

da

[[email protected] ~]# docker rm di

di

排错时, 使用交互模式打开容器, 使用/bin/bash覆盖/usr/sbin/sshd -D. 并将sshd日志输出到挂载在宿主机的/tmp目录.

[[email protected] ~]# docker run --rm -t -i --name=da --volume=/tmp:/data01 digoal/sshd_ceph:giant /bin/bash

[[email protected] /]# /usr/sbin/sshd -D -E /data01/sshd.log

查看容器IP

[[email protected] tmp]# docker inspect -f ‘{{.NetworkSettings.IPAddress}}‘ da

172.17.0.11

使用SSH客户端连接这个容器, 同样被退出.

[[email protected] tmp]# ssh 172.17.0.11

The authenticity of host ‘172.17.0.11 (172.17.0.11)‘ can‘t be established.

ECDSA key fingerprint is db:5c:6b:2a:bc:9e:3e:31:24:1b:c0:8d:5f:96:f2:e0.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added ‘172.17.0.11‘ (ECDSA) to the list of known hosts.

[email protected]‘s password:

Last login: Tue Dec  9 15:20:36 2014 from 172.17.42.1

Connection to 172.17.0.11 closed.

查看容器的sshd日志如下, 原因找到了. :

[[email protected] tmp]# cat /tmp/sshd.log

Server listening on 0.0.0.0 port 22.

Server listening on :: port 22.

Accepted password for root from 172.17.42.1 port 41153 ssh2

PAM: pam_open_session(): Cannot make/remove an entry for the specified session

Received disconnect from 172.17.42.1: 11: disconnected by user

解决办法1, 修改/etc/pam.d/sshd  :

[[email protected] /]# /usr/sbin/sshd -D -E /data01/sshd.log

^C

注释如下

[[email protected] /]# vi /etc/pam.d/sshd

#session    required     pam_loginuid.so

现在可以连接了

[[email protected] tmp]# ssh 172.17.0.11

[email protected]‘s password:

Last login: Tue Dec 16 20:28:15 2014 from 172.17.42.1

[[email protected] ~]#

解决办法2, 使用超级权限启动容器 :

[[email protected] /]# exit

exit

[[email protected] ~]# docker run --rm -t -i --name=da --privileged=true --volume=/tmp:/data01 digoal/sshd_ceph:giant /bin/bash

[[email protected] /]# /usr/sbin/sshd -D -E /data01/sshd.log

[[email protected] tmp]# docker inspect -f ‘{{.NetworkSettings.IPAddress}}‘ da

172.17.0.13

正常连接 :

[[email protected] tmp]# ssh 172.17.0.13

The authenticity of host ‘172.17.0.13 (172.17.0.13)‘ can‘t be established.

ECDSA key fingerprint is db:5c:6b:2a:bc:9e:3e:31:24:1b:c0:8d:5f:96:f2:e0.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added ‘172.17.0.13‘ (ECDSA) to the list of known hosts.

[email protected]‘s password:

Last login: Tue Dec  9 15:20:36 2014 from 172.17.42.1

[[email protected] ~]#

[[email protected] ~]# cat /etc/pam.d/sshd |grep pam_loginuid

session    required     pam_loginuid.so

最后, 建议在创建sshd镜像时, 就将session    required     pam_loginuid.so注释掉.

那么以后使用这个镜像启动容器, 就不会出现文章开头的问题了.

[参考]

1. man docker-run

--privileged=true|false Give extended privileges to this container.  By default,  Docker  containers  are  “unprivileged”

(=false)  and  cannot,  for  example, run a Docker daemon inside the Docker container.  This is because by default a con‐

tainer is not allowed to access any devices.  A “privileged” container is given access to all devices.

When the operator executes docker run --privileged, Docker will enable access to all devices on the host as well  as  set

some configuration in AppArmor to allow the container nearly all the same access to the host as processes running outside

of a container on the host.

2. man sshd_config

# Set this to ‘yes‘ to enable PAM authentication, account processing,

# and session processing. If this is enabled, PAM authentication will

# be allowed through the ChallengeResponseAuthentication and

# PasswordAuthentication.  Depending on your PAM configuration,

# PAM authentication via ChallengeResponseAuthentication may bypass

# the setting of "PermitRootLogin without-password".

# If you just want the PAM account and session checks to run without

# PAM authentication, then enable this but set PasswordAuthentication

# and ChallengeResponseAuthentication to ‘no‘.

# WARNING: ‘UsePAM no‘ is not supported in Red Hat Enterprise Linux and may cause several

# problems.

#UsePAM no

UsePAM yes

UsePAM  Enables the Pluggable Authentication Module interface.  If set to “yes” this will enable PAM authentication using

ChallengeResponseAuthentication and PasswordAuthentication in addition to PAM account and session module processing

for all authentication types.

Because PAM challenge-response authentication usually serves an equivalent role to password authentication, you

should disable either PasswordAuthentication or ChallengeResponseAuthentication.

If UsePAM is enabled, you will not be able to run sshd(8) as a non-root user.  The default is “no”.

docker sshd image problem, session required pam_loginuid.so, cann't login

时间: 2024-10-10 20:53:06

docker sshd image problem, session required pam_loginuid.so, cann't login的相关文章

关于session失效如何跳转到login页中的问题

原文:关于session失效如何跳转到login页中的问题 源代码下载地址:http://www.zuidaima.com/share/1550463697652736.htm 这是刚刚一牛友问到的一个问题,我给他做的一个简单的demo,看不懂可以随时在群里找我,我是 苏-木木-11187 (可以运行起来,重点是看拦截器怎么写和怎么配的) 项目源码截图

Docker Supervisor

Docker 容器在启动的时候开启单个进程,比如,一个 ssh 或者 apache 的 daemon 服务.但我们经常需要在一个机器上开启多个服务,这可以有很多方法,最简单的就是把多个启动命令放到一个启动脚本里面,启动的时候直接启动这个脚本. 例如:docker  run  –d  镜像  /run.sh 另外就是安装进程管理工具. 本次将使用进程管理工具 supervisor 来管理容器中的多个进程.使用 Supervisor 可以更好的控制.管理.重启我们希望运行的进程. Superviso

centos 安装部署docker与局域网主机相通详细配置

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.有了docker,对于运维和开发都是福音.下面直接上配置: centos安装docker源: yum install http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm 安装docker: yum install -y docker-io 启动docker:

Centos上Docker 使用dockerfile构建容器实现ssh

这几日在学习docker.遇到的问题数一年都数不完,网上大多数都是ubuntu的,百度或者谷歌的时候心好累.写写文档来帮助使用centos的docker爱好者们. docker基本操作这里就不介绍了 编写时间为:2015年12月25日17:41:41 如果你是准备开始学习,或者准备想用ssh实现连接容器这个功能时,请先自己折腾一下.不然达不到学习的目的哦 ssh -p 32772 [email protected] Read from socket failed: Connection rese

为Docker镜像添加SSH服务

一.基于commit命令创建 1. 首先下载镜像 $ docker run -it ubuntu:16.04 /bin/bash 2. 安装SSH服务 #更新apt缓存 [email protected]:/# apt-get update [email protected]:/# apt-get install openssh-server -y 3. 配置SSH服务:如果需要正常启动SSH服务,则需手动创建/var/run/sshd目录,并启动ssh服务. 1) 创建目录 [email pr

Docker之配置Centos_ssh

获取最新的docker image 使用 docker pull centos即可.使用docker run -i -t centos /bin/bash就可以运行了.当初以为运行后直接配置个IP.启动SSH就行了,可搞了半天都不对,N多错误.后来找了下,Docker其实不是这个样子玩滴. 所以综合了下,还是自己根据Dockerfile来创建一个新的镜像吧,首先就是要编译Dockerfile,它的内容如下 [[email protected] shencj]# cat Dockerfile # 

创建支持ssh的docker镜像

docker容器运行,一般不能ssh,这容器的管理带来麻烦,下面将介绍如何创建支持ssh的docker镜像 首先从dock hub  下载 ubuntu的镜像 命令: docker pull ubuntu 新建一个ssh_ubuntu 目录 mkdir /ssh_ubuntu cd /ssh_ubuntu ;touch Dockerfile vi Dockerfile Dockerfile内容 FROM ubuntu MAINTAINER lincoln_zhongRUN apt-get upd

Centos7 Docker 多主机 容器互连--基于OVS

来一张自己画的图,mark:2016年6月27日17:09:14 自己理解,如有错误 多谢指教. centos7, 部署OVS和docker.以及基于centos6.8的ssh images 命令. #!/bin/bash #auther :V yum upgrade -y sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config systemctl stop firewalld.service && systemctl dis

docker note

非原创,只做学习记录来使用 --------------------------------------------------------- Docker使用的是Linux容器,这是运行在与它的宿主机器同样的操作系统上.这准许它可以和宿主机器共享许多系统资源.它也会使用AuFS作为文件系统,也为你管理网络. AuFS是一个层状的文件系统,因此你可以有一个只读部分和一个只写部分,然后将二者组合起来.你可以使系统的共同的部分用作只读,那块是被所有容器共享,并且给每个容器自己的可写区域 这几天一直搞