如何配置 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
我正在尝试为 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