【问题标题】:docker image - centos 7 > ssh service not founddocker image - centos 7 > 找不到 ssh 服务
【发布时间】:2018-12-22 01:06:56
【问题描述】:

我在我的 ubuntu 机器上安装了 docker image - centos 7。但是找不到 ssh 服务。所以我不能运行这个服务。

[root@990e92224a82 /]# yum install openssh-server openssh-clients
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
 * base: mirror.dhakacom.com
 * extras: mirror.dhakacom.com
 * updates: mirror.dhakacom.com
Package openssh-server-6.6.1p1-31.el7.x86_64 already installed and latest version

Package openssh-clients-6.6.1p1-31.el7.x86_64 already installed and latest version
Nothing to do
[root@990e92224a82 /]# ss            
ssh          ssh-agent    ssh-keygen   sshd         ssltap       
ssh-add      ssh-copy-id  ssh-keyscan  sshd-keygen  

如何远程登录docker镜像?

【问题讨论】:

  • sshd 在那里,但为什么需要 ssh 到您的容器?
  • 我知道 sshd 在那里。但找不到与该服务相关的任何内容。我想远程登录docker容器运行ansible
  • 一般情况下,尝试ssh to a container is a container anti pattern。如果您在容器中使用 ansible 做某事,是否可以在映像构建期间完成?你可以通过docker connection plugin 来做吗?

标签: docker ssh centos


【解决方案1】:

您必须在 Dockerfile 上执行以下说明。

RUN yum install -y sudo wget telnet openssh-server vim git ncurses-term
RUN useradd your_account

RUN mkdir -p /home/your_account/.ssh && chown -R your_account   /home/your_account/.ssh/ 

# Create known_hosts
RUN touch /home/your_account/.ssh/known_hosts


COPY files/authorized_keys /home/your_account/.ssh/
COPY files/config          /home/your_account/.ssh/
COPY files/pam.d/sshd      /etc/pam.d/sshd
RUN touch /home/your_account/.ssh/environment
RUN chown -R your_account /home/your_account/.ssh
RUN chmod 400 -R  /home/your_account/.ssh/*
RUN chmod 700 -R  /home/your_account/.ssh/known_hosts
RUN chmod 700  /home/your_account/.ssh/environment


# Enable sshd
COPY files/sshd_config /etc/ssh/
RUN ssh-keygen -f /etc/ssh/ssh_host_rsa_key -N '' -t rsa 

# Add a account into sudoers and this account doesn't need to type his password
COPY files/sudoers /etc/
COPY files/start.sh /root/

我必须删除文件 /etc/pam.d/sshd 上的“pam_nologin.so”,因为当我将 openssh-server 的版本升级到 openssh-server-6.6.1p1-31.el7 时,pam_nologin.so即使文件 /etc/nologin 不存在,也会禁止任何用户远程登录。

start.sh

#!/bin/bash
/usr/sbin/sshd -E /tmp/sshd.log

启动centos容器

  • docker run -d -t -p $(sshPort):22 --name $(containerName) $(imageName) /bin/bash
  • docker exec -d $(containerName) bash -c "sh /root/start.sh"

登录容器

  • ssh $(Docker ip) $(sshPort)

【讨论】:

  • 这里的文件是什么?
【解决方案2】:

扩展到@puritys

您可以改为在 Dockerfile 中执行此操作

文件最后:

 ENTRYPOINT /usr/sbin/sshd -E /tmp/sshd.log && /bin/bash

那么你只需要运行:

 docker run -d -p -t $(sshPort):22 --name $(containerName) $(imageName) /bin/bash

【讨论】:

    猜你喜欢
    • 2019-06-12
    • 2021-01-22
    • 1970-01-01
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    • 2017-08-29
    相关资源
    最近更新 更多