docker随笔3--ssh服务

docker镜像搭建以后很多时候并不是本机操作而是直接链接docke,所以需要ssh服务。

下面是基于ubuntu的操作。

1. 拉取镜像并进入容器

docker pull ubuntu:16.04
docker run -it ubuntu /bin/bash

2.检测是否有ssh服务

sshd  #提示没有sshd服务
apt-get update #第一次进入拉取的容器需要update,因为源默认是关闭的
apt-get install  openssh-server #安装ssh服务

如果嫌下载的速度慢可以配置镜像的软件源。

sshd  #再次执行ssh命令

提示:sshd re-exec requires execution with an absolute path

正常启动ssh服务,需要目录/var/run/sshd

mkdir -p /var/run/sshd

/usr/sbin/sshd -D &

检测ssh的22端口是否被监听

netstat -tunlp
#提示bash: netstat: command not found
#安装: apt-get install net-tools

 3.修改ssh登录限制,取消pam限制:

注释:session required pam_loginuid.so

sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd 

4.创建公钥:

ssh-keygen -t rsa #在宿主机创建公钥,将其复制

在容器中创建:

vim  /root/.ssh/authorized_keys

并将复制好的宿主公钥传入其中。

5.创建开机自动启动的脚本。

vim  /run.sh
chmod +x run.sh

run.sh里面的内容是:

#!/bin/bash 
/usr/sbin/sshd -D

保存后执行:exit

生成新的镜像:

docker commit  9145  sshd/ubuntu  ubuntu 

开放端口给外部访问

docker run -p  100081:22 -d sshd/ubuntu  /run.sh

检测是否成功:

docker ps 

如果没有的话查看日志:

docker logs -f  container_id(容器的id)
原文地址:https://www.cnblogs.com/callmelx/p/11039121.html