我的编程空间,编程开发者的网络收藏夹
学习永远不晚

教你如何通过 SSH 连接到 Docker 容器

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

教你如何通过 SSH 连接到 Docker 容器

在这里插入图片描述

SSH 是系统管理员工具箱中最常用的命令之一,但它并不常见于 Docker。以下是如何通过 SSH 连接到正在运行的容器,以及为什么在这样做之前应该三思而后行。

你应该在 Docker 容器中使用 SSH 吗?

SSH 进入 Docker 容器通常是一种不好的做法,应该避免。docker exec使用命令在容器中获取 shell几乎总是更好。

Docker 新手可能会尝试使用 SSH 来更新容器内的文件。容器应该是一次性的,所以它们在创建后应该被视为不可变的,除了存储在卷中的持久数据。编辑源代码时创建新图像并重新启动容器。

除了多步骤配置过程之外,在 Docker 映像中安装 SSH 会添加几个依赖包并暴露另一个潜在的攻击向量。在具有多个活动容器的系统上,您将运行多个独立的 SSH 进程,并且必须记住每个容器的正确端口。

无需将 SSH 添加到单个容器,只需在运行 Docker 的物理主机上安装一次即可。使用 SSH 连接到您的主机,然后运行docker exec -it my-container bash以访问各个容器。
虽然docker exec是首选方法,但仍然存在 SSH 可能有用的场景。您可以将其作为权宜之计引入,以与遗留部署系统集成。它也可能被一些 IDE 和构建工具用于在开发期间提供实时重新加载功能。

在 Docker 容器中安装 SSH 服务器

大多数流行的 Docker 基础镜像都被有意简化了。您需要自己添加 OpenSSH 服务器,即使是从流行的操作系统发行版派生的图像。

Dockerfile这是基于 Debian 的映像的示例:

RUN apt-get update && apt-get install -y openssh-server
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

ENTRYPOINT service ssh start && bash

SSH 配置已修改,因此您可以root以 Docker 容器中的默认用户身份登录。为了提高安全性,请改为设置专用用户帐户:

RUN useradd -m -s /bin/bash sshuser

这将创建一个名为主sshuser目录 ( -m)的新用户。该-s开关将用户的默认登录 shell 设置为 Bash。

使用ENTRYPOINT确保 SSH 服务总是在容器启动时启动。然后将执行交给 Bash 作为容器的前台进程。您可以将其替换为您的应用程序的二进制文件。

配置身份验证

接下来,您需要设置身份验证系统。您可以为您的sshuser帐户分配一个密码并使用该密码登录:

RUN echo "sshuser:Changeme" | changepasswd

更安全的方法是设置 SSH 密钥身份验证。您需要在客户端计算机上创建一个密钥对,然后将公共部分复制到容器中。这样,SSH 守护程序可以在您连接时验证您机器的身份。

更改您为您的用户Dockerfile设置.ssh配置文件夹。使用docker cp命令或COPY. Dockerfile在后一种情况下,密钥将被烘焙到图像中,任何有权访问的人都可以看到。

COPY id_rsa.pub /home/sshuser/.ssh/authorized_keys
RUN chown -R sshuser:sshuser /home/sshuser/.ssh
RUN chmod 600 /home/sshuser/.ssh/authorized_keys

这一系列命令使用工作目录中的公钥创建 SSHauthorized_keys文件。id_rsa.pub调整文件系统权限以匹配 SSH 的要求。

连接到容器

现在您已准备好连接到您的容器。使用绑定到主机的端口 22 运行容器:

docker run -p 22:22 my-image:latest

运行ssh sshuser@example.com会给你一个容器内的外壳。

如果要从托管 Docker 容器的机器进行连接,则可以跳过绑定端口。用于docker inspect获取容器的 IP 地址,然后将其传递给 SSH 连接命令。

docker inspect <id-or-name> | grep 'IPAddress' | head -n 1

使用您机器上的 SSH 客户端连接到容器:

ssh root@172.17.0.1
# OR
ssh sshuser@172.17.0.1

如果您在主机上运行单独的 SSH 服务器,或者您有多个需要端口 22 的容器,则需要使用备用端口。以下是当 SSH 绑定到端口 2220 时启动连接的方法:

cker run -p 22:2220 my-image:latest

ssh root@172.17.0.1 -p 2220

使用 SSH Config 设置容器快捷方式

您可以操作 SSH 配置文件以简化与各个容器的连接。编辑~/.ssh/config以定义具有预配置端口的速记主机:

Host my-container
    HostName 172.17.0.1
    Port 2220
    User sshuser

现在你可以ssh my-container直接跑到你的容器中了。这使得在不记住容器 IP 和端口的情况下处理多个连接变得更容易。

改用 Dockssh 简化容器管理

Dockssh项目通过提供另一个让您运行的守护进程更进一步ssh my-container@example.com,无需任何手动 SSH 配置。您不需要在容器中安装 SSH 服务器;Dockssh 自动代理 SSH 连接并运行正确的docker exec命令。

你必须先安装 Redis 来存储 Dockssh 的配置数据:

sudo apt install redis

接下来,通过添加带有容器名称和 SSH 连接密码的 Redis 记录来定义要公开的容器:

redis-cli set dockssh:my-container:pass "container-password-here"

然后下载 Dockssh:

sudo curl https://github.com/alash3al/dockssh/releases/download/v1.1.0/dockssh_linux_amd64 -O /usr/local/bin/dockssh
sudo chmod +x /usr/local/bin/dockssh
sudo ufw allow 22022

# Start DockSSH server
dockssh

现在您可以连接到您的容器:

ssh my-container@example.com -p 22022

Dockssh 默认监听 22022 端口。打开防火墙以允许使用该端口的传入连接。

连接时,系统会提示您输入容器的密码。这是container-password-here在我们上面的 Redis 记录中设置的。

使用 Dockssh 可以轻松地通过 SSH 连接到大量 Docker 容器。当您定期从远程主机连接到您的容器时,这种方法是理想的,因为它将两步“SSH then docker exec”序列简化为一个令人难忘的命令。

将 Dockssh 注册为系统服务以供长期使用:

sudo nano /etc/systemd/system/dockssh.service
[Unit]
Description=Dockssh service
After=network.target

[Service]
type=simple
Restart=always
RestartSec=1
User=root
ExecStart=/usr/local/bin/dockssh

[Install]
WantedBy=multi-user.target

使用启用服务systemctl:

sudo systemctl enable dockssh.service
sudo systemctl start dockssh

Dockssh 现在将在您的系统启动时自动启动。

概括

将 SSH 与 Docker 容器相结合被广泛认为是一种反模式,但它仍然在开发、测试和遗留环境中使用。如果没有其他选择,您可以将 SSH 服务器添加到容器中,复制公钥,然后通过容器的 IP 或主机端口绑定进行连接。

想要远程管理大量 Docker 容器的系统管理员可以试试 Dockssh。ssh它允许您通过无缝的幕后映射来运行熟悉的命令docker exec,使用未修改的图像为您提供两全其美的体验。

到此这篇关于通过 SSH 连接到 Docker 容器的文章就介绍到这了,更多相关SSH 连接到 Docker 容器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

教你如何通过 SSH 连接到 Docker 容器

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何通过ssh远程连接docker中的容器

这篇文章主要介绍“如何通过ssh远程连接docker中的容器”,在日常操作中,相信很多人在如何通过ssh远程连接docker中的容器问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何通过ssh远程连接dock
2023-06-19

ssh如何连接docker服务器

这篇文章主要讲解了“ssh如何连接docker服务器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ssh如何连接docker服务器”吧!主要说一下怎么创建一个docker服务,让别人可以通过
2023-06-27

如何连接docker中的MySQL容器

目录连接docker中mysql容器docker中MySQL容器启动一 下拉镜像二 运行镜像连接docker中MySQL容器我以gin web项目为例,演示在容器中运行时mysql的相关配置。1. 登入MySQL修改访问权限并刷新权限。
2022-11-30

如何通过命令行连接到Redis服务器

要通过命令行连接到Redis服务器,您需要使用redis-cli命令。下面是连接到Redis服务器的步骤:打开终端或命令提示符窗口。输入以下命令以连接到Redis服务器:redis-cli -h -p 其
如何通过命令行连接到Redis服务器
2024-04-09

教你如何通过SSH在Linux SysOps中部署应用程序

部署应用程序是Linux系统运维中的重要任务之一,使用SSH可以方便地远程登录到Linux服务器并执行命令。下面是一些基本步骤来通过SSH在Linux SysOps中部署应用程序:1. 配置SSH密钥对:首先,在本地系统上生成SSH密钥对。
2023-10-09

Linux下如何配置Docker容器间网络连接

本篇内容主要讲解“Linux下如何配置Docker容器间网络连接”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux下如何配置Docker容器间网络连接”吧!Docker容器都是独立的,互相
2023-06-12

如何限制通过SSH Ubuntu命令远程连接的用户帐号

这篇文章给大家分享的是有关如何限制通过SSH Ubuntu命令远程连接的用户帐号的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Ubuntu命令,假如你启用了SSH服务,那么任何有有效帐号的用户都可以远程连接。这可
2023-06-17

如何通过VM连接阿里云服务器

在进行云服务器管理时,我们可能需要通过虚拟机(VM)连接阿里云服务器。本文将详细介绍如何通过VM连接阿里云服务器。一、准备工作阿里云账号:首先,你需要在阿里云官网上注册一个账号,并创建一个云服务器。虚拟机:你需要在阿里云上创建一个虚拟机,以便在本地运行应用程序。二、连接步骤登录阿里云控制台:在浏览器中输入阿里云的
如何通过VM连接阿里云服务器
2023-11-23

阿里云服务器如何用ssh连接手机热点教程

首先,在手机上登录阿里云账号,并进入阿里云手机APP,在APP中找到“热点”选项,点击进入。接下来,可以在手机中找到“热点分享”选项,点击进入。然后,在“热点分享”页面中,选择“使用SSH连接”,点击“连接”按钮。随后,手机会提示连接成功,并出现一个“热点登录”页面,点击“登录”按钮即可登录阿里云手机APP账号。在登录成功后,会自动跳转到阿
2023-10-27

阿里云服务器如何用ssh连接电脑使用教程

首先,在使用阿里云服务器之前,需要下载并安装阿里云服务器客户端,以及其相关的组件,例如Tomcat、WebServer等等,以确保能够正常使用其服务。下载并安装成功后,打开阿里云服务器的Web界面,可以通过在地址栏中输入http://localhost(前面有一串数字)来确定阿里云服务器的IP地址,并输入服务器的登录账号和密码,以及验证码等信息。在阿里云服务器的控制台页面中,输入相应的管理员密码,并通过点击“连接”按钮来尝试连接到阿里云服务...
2023-10-27

如何解决MySQL报错:无法通过套接字连接到本地MySQL服务器

要解决MySQL报错:“无法通过套接字连接到本地MySQL服务器”,可以尝试以下步骤:1. 检查MySQL服务器是否正在运行。可以使用以下命令来检查MySQL服务器的状态:```systemctl status mysql```2. 如果M
2023-10-10

如何通过网页连接阿里云服务器

阿里云服务器(ECS)是阿里云提供的一种弹性计算服务,它可以帮助用户快速构建和扩展应用程序。在使用阿里云服务器时,有时候我们需要通过网页连接服务器来管理和配置它。本文将介绍如何通过网页连接阿里云服务器,以便您更好地管理和使用您的服务器。正文:第一步:登录阿里云控制台首先,您需要登录阿里云控制台。在浏览器中输入https
如何通过网页连接阿里云服务器
2024-01-17

如何解决MySQL报错:无法通过套接字连接到本地MySQL服务器(111)

当MySQL报错“无法通过套接字连接到本地MySQL服务器(111)”时,可能是由于以下几个原因引起的:1. MySQL服务器未启动:首先要确保MySQL服务器已经启动。可以尝试重启MySQL服务来解决此问题。2. MySQL服务器监听的端
2023-10-18

编程热搜

目录