使用Docker创建一个ssh连接的容器

使用Docker创建一个ssh连接的容器

使用Dockerfile创建一个配置好sshd的镜像
  1. 创建工作目录
    $ mkdir sshd_centos
    $ cd sshd_centos
    $ touch Dockerfile run.sh

  2. 编写run.sh脚本和authorized_keys 文件
    run.sh内容 (此处会产生问题,详情见文章最后的文字叙述)
    #!/bin/bash
    /usr/sbin/sshd -D
    再宿主机上生成SSH密钥对,并创建authorized_keys 文件
    在root用户目录下创建.ssh目录,并复制需要登录的公钥信息
    (一般为本地主机用户目录下的.ssh/id_rsa.pub文件,可由ssh-keygen -t rsa命令生成)
    在宿主机执行命令 ssh-keygen -t rsa 生成rsa的公私密钥对,密钥对命名为id_rsa.pub
    密码设置为helloworld
    $ cat ~/.ssh/id_rsa.pub > authorized_keys
    (此时,在sshd_centos工作目录下有三个文件:run.sh、Dockerfile、authorized_keys)

  3. 编写Dockerfile
    FROM centos-zdx
    MAINTAINER from xxxxxxx@qq.com
    RUN sed -ri ‘s/session required pam_loginuid.so/#session required pam_loginuid.so/g’ /etc/pam.d/sshd
    ADD authorized_keys /root/.ssh/authorized_keys
    ADD run.sh /run.sh
    RUN chmod 755 /run.sh
    EXPOSE 22
    CMD ["/run.sh"]

  4. 创建镜像
    $ cd sshd_centos
    $ sudo docker build –t sshd:dockerfile .

  5. 测试镜像,运行容器
    $ docker run –d –p 10122:22 sshd:dockerfile
    在宿主机新打开一个终端,连接到新建容器
    $ ssh 192.168.136.130 –p 10122
    $ yes
    $ 输入rsa密码:helloworld
    成功连接!

产生问题:

由于run.sh执行脚本中命令是/usr/sbin/sshd –D
会产生attach进入容器后就进入了这个命令的shell状态并且ctrl+c退出就会把容器停掉。所以要优化一下
方法如下:
将run.sh中/usr/sbin/sshd –D 末尾加上&符号 作用是启用sshd服务后退出shell状态,即/usr/sbin/sshd –D & wq保存退出,然后重新用Dockerfile创建镜像。
启动容器:
docker run -dit --name test sshd:dockerfile sh -c “/run.sh && /bin/bash”
XShell外部ssh连接docker容器:需要将~/.ssh/目录下的公钥文件id_rsa和id_rsa.pub 导出,用XShell连接时,输入宿主机ip以及与容器22端口相对应的宿主机大端口,登陆用户名root,然后选择使用公钥连接,并将公钥文件导入,输入rsa密码helloworld然后连接成功!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值