如何配置 Debian SSHD 在 Docker 容器中进行远程调试?

How to configure Debian SSHD for remote debugging in a Docker container?

我正在尝试为 Docker Debian 容器设置远程调试,以便在我的 Windows 笔记本电脑上调试 Ruby 应用程序。

这是引导我朝这个方向发展的 post: https://intellij-support.jetbrains.com/hc/en-us/community/posts/207649545-Use-RubyMine-and-Docker-for-development-run-and-debug-before-deployment-for-testing-

我在容器中有 Ruby 应用程序和 SSHD 运行ning,尽管我找到的配置 SSHD 的方法与 Linux 发行版不完全兼容 Ruby 图片基于.

我的 SSHD 配置基于此 Docker 文档页面:https://docs.docker.com/engine/examples/running_ssh_service/

我的图像基于来自 Docker Hub 的 ruby:2.2 图像,它使用 Debian 8 而不是上面 SSHD 示例中使用的 Ubuntu 16.04。

我可以进入 SSH 提示符,但无法使用 docker 文件中设置的 root 截屏密码登录。

我愿意接受任何有效的解决方案,正确启用 root 登录或添加具有正确权限的新用户以允许远程调试。我只是好奇在 Debian 环境下哪条道路最直接。如果是创建新用户,他们需要什么权限?

此外,需要明确的是,我将此视为试验 运行 并且在我为开发之外的任何上下文部署应用程序时,显然会确保以某种方式去除 SSHD 功能.

在此先感谢您的帮助。

这是我当前的docker文件

FROM ruby:2.2
RUN apt-get update && apt-get install -y \
    build-essential \
    libpq-dev \
    nodejs \
    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

RUN mkdir /MyApp
WORKDIR /MyApp
ADD Gemfile /MyApp/Gemfile
ADD Gemfile.lock /MyApp/Gemfile.lock
RUN bundle install
ADD . /MyApp

这是我的 docker-compose.yml

version: '2'
services:
  web:
    build: .
    command: /CivilService/docker-dev-start.sh
    volumes:
      - .:/CivilService
    ports:
      - "3000:3000"
      - "3022:22"

docker-dev-start.sh 看起来像这样

#!/bin/bash

# start the SSH server for connecting the debugger in development
/usr/sbin/sshd -D &
bundle exec rails s -p 3000 -b '0.0.0.0'

不同发行版的 SSH 配置可能略有不同,因此替换特定字符串可能不起作用。

要覆盖任何类型的 PermitRootLogin 字符串,请使用:

RUN sed -i 's/PermitRootLogin .*/PermitRootLogin yes/' /etc/ssh/sshd_config