- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 VSCode Dev Container ,我希望能够从我的容器内 ssh
到我的容器内(出于测试目的)。
ssh root@localhost
我已经阅读了很多文章和类似的问题,但我无法创建一个最小的功能示例。
我的Dockerfile
如下:
FROM ubuntu:18.04
RUN apt-get update && apt-get install -y --no-install-recommends net-tools iputils-ping openssh-client 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
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
我的devcontainer.json
如下:
{
"name": "Ubuntu",
"build": {
"dockerfile": "Dockerfile",
},
"settings": {
"terminal.integrated.shell.linux": "/bin/bash"
},
"extensions": [],
"forwardPorts": [
22
],
"appPort": 22,
"runArgs": [
"--net",
"host",
"-p",
"22:22"
]
}
我测试了多种参数组合(forwardPorts
、appPort
、EXPOSE
等),但每次都是:
ssh
连接被拒绝请问您知道如何修改这些文件以便能够从容器的 bash 解释器连接到 ssh
吗?
最佳答案
有几个问题需要解决:
appPort
做到这一点: "appPort": "2222:22",
此符号将主机的端口 2222 映射到容器的 22。
runArgs
和 forwardPorts
是多余的。
您需要添加 "overrideCommand": false
防止 VSCode 覆盖 CMD
在 Dockerfile 中声明。
你的 sed
在 Dockerfile 中不正确,默认配置不包含行 PermitRootLogin prohibit-password
但它包含 #PermitRootLogin <some-other-value
.更改 sed
命令:
RUN sed -i 's/.*PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config
为方便起见,这里是修改后的文件:
Dockerfile:
FROM ubuntu:18.04
RUN apt-get update && apt-get install -y --no-install-recommends net-tools iputils-ping openssh-client openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:test' | chpasswd
RUN sed -i 's/.*PermitRootLogin.*/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
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
devcontainer.json:
{
"name": "Ubuntu",
"build": {
"dockerfile": "Dockerfile",
},
"settings": {
"terminal.integrated.shell.linux": "/bin/bash"
},
"extensions": [],
"appPort": "2222:22",
"overrideCommand": false
}
当您运行容器时,您可以使用 ssh root@localhost -p 2222
连接到它和密码“test”。
另外,我不知道你为什么决定使用 VSCode 特定的方式来实现 Docker,也许这样做有充分的理由,但有更好的方法。您可以使用 docker-compose创建一个测试环境。它是:
看看这个docker-compose.yml
:
# Check out this reference https://docs.docker.com/compose/compose-file/
# for list of available versions, their differences, and the file format in general.
version: "3.0"
# This is where you declare containers you want to run.
services:
# This is the name of the service. One cool thing about it is that is will be a DNS name
# in the networks where this service will be present. So when you need to connect this
# service from another container you can simply do 'ssh username@ssh-server'.
ssh-server:
# This is the name of the image to use. In this case I intentionally used a nonexistent name.
# Because of that when Docker will build the image from the Dockerfile, it will assign this
# name to the image. This is not required since I've added 'build' property but giving the
# right name could come handy.
image: myssh
# This is equivalent to 'build an image from the Dockerfile in current working directory' or
# 'docker build .'
build:
context: .
dockerfile: Dockerfile
# This maps host's port 2222 to container's 22. This isn't necessary unless you want to connect
# to this container from outside (e.g. from host or another machine). Containers do not
# require 'exposure' or any other step to reach one another within one network - they have all
# ports open. That is why it is called port forwarding or mapping.
ports:
- "2222:22"
# Same image as the server but with a different command to execute.
ssh-client:
image: myssh
build:
context: .
# Just a loop to run a command every second. Won't work with password, you need a key or some hacks.
command: bash -c 'while sleep 1; do ssh root@ssh-server ls /; done'
如果将其保存到带有 Dockerfile
的目录中上面,你可以用 docker-compose up
运行它.或者你可以将它与 VSCode 集成:当没有 .devcontainer
时目录,然后单击 Reopen in container
, 您可以选择 From 'docker-compose.yml'
,然后选择您想要的服务之一,它将构建并启动一个容器。它还将创建 .devcontainer
目录 devcontainer.json
关于docker - 如何使用 ssh 在本地连接到 VSCode 容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65127405/
要构建我的远程环境,我需要设置几个环境变量(它们在 docker-compose 文件中使用)。这些是在我的 ZSH 环境中设置的,因此从终端运行 docker-compose build 可以按预期
这是vscode在主机中安装vscode-server时的日志 我发现它得到了 vscode-server 提交 ID,如下日志: [13:07:27.334] Using commit id "f8
在 devContainer 实例中安装 LiveShare 扩展时出现错误。 例如使用:https://github.com/microsoft/vscode-remote-try-go/然后将扩展
在 devContainer 实例中安装 LiveShare 扩展时出现错误。 例如使用:https://github.com/microsoft/vscode-remote-try-go/然后将扩展
我尝试在代码中构建和调试扩展。 我从https://github.com/microsoft/vscode-wordcount下载了字数统计的样本. 当我单击 F5 时,未生成 ./out 文件夹,并
你好,我最近从 Atom 切换到 Vs-code,并尝试了一些解释如何在他们的网站上添加语言支持的教程,我知道语言支持应该有着色器 问题是如何为自定义语言添加颜色?当我基本上使用每种语言时,我习惯了自
为了为我的数据科学工作流提供足够的计算能力,我在远程机器上使用 Docker 容器。虽然我可以通过 vscode-remote 连接到我的远程机器,但我无法连接到运行在这台机器上的 Docker 容器
我有一个创建多个 Docker 镜像的项目。我想在 vscode-remote 中为每个图像设置一个 devcontainer,以便我可以为每个图像启动一个容器。 我一次只需要启动并连接到一个容器/图
我认为这是可以通过编辑实现的 keybindings.json .由于我似乎无法找到可用命令的列表,因此通过自动完成我已经做到了这一点: { "key": "SHORTCUT"
gopls 需要在工作区的根目录下有一个模块。 您可以通过将每个模块作为工作区文件夹打开来处理多个模块。 此工作流程的改进即将推出 ( https://github.com/golang/go/iss
我的电脑上已经安装了 vscode。不久前我注意到它现在包含在 anaconda 发行版中。与我已经安装的 vscode 相比,使用 anaconda 附带的 vscode 有什么好处吗? 仅供引用,
我的电脑上已经安装了 vscode。不久前我注意到它现在包含在 anaconda 发行版中。与我已经安装的 vscode 相比,使用 anaconda 附带的 vscode 有什么好处吗? 仅供引用,
我想为 VSCode 编写一个扩展,重用 vscode-python 的重构/重命名功能扩大。这样,当用户执行我的命令时,我的扩展程序将对 .py 文件的变量进行重命名。我不知道 vscode-pyt
环境 vscode 版本 1.19.1 (1.19.1) 鲁博科普 (0.52.1) Darwin mbp 16.7.0 Darwin 内核版本 16.7.0:2017 年 10 月 4 日星期三 0
我在写 Markdown 文本时尝试自动换行:我希望当我输入比 wrap line length 长的行时自动换行设置,由硬 中断(即 newline 字符)。 我已经设定 word wrap至 wo
我想制作一个涉及发布到我的 API 的 VSC 扩展,但是当我将我的 fetch 语法写出以发布到我的服务器时,它不起作用。所以我想也许我需要添加 node-fetch,所以我做了npm i --sa
我有一个 master 分支,它是生产分支,因此我创建了几个其他分支来修复和缺陷。我在这些分支中做了一些更改,所以我在这些分支中提交了很多次。根据政策,我必须为 master 分支中的缺陷创建单个提交
我正在使用 Visual Studio Code Insiders 版本 1.65.0-insider。直到 3 天前,我通过 VPN 从工作笔记本电脑连接到工作中的远程服务器时没有遇到任何问题。我有
在 Windows 上,我必须在打开的每个新终端 session 上运行命令 start-ssh-agent.cmd。我的开发环境是VSCode,每天都会打开十几个新终端。每次打开终端后,我都必须手动
我最近开始使用 VSCode,我真的很喜欢它。我用谷歌搜索了我的问题,并试图找到与 VSCode 相关的任何答案。 考虑我有以下代码: if (a === 'some condition') re
我是一名优秀的程序员,十分优秀!