iis服务器助手广告广告
返回顶部
首页 > 资讯 > 服务器 >教你如何通过 SSH 连接到 Docker 容器
  • 845
分享到

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

2024-04-02 19:04:59 845人浏览 八月长安
摘要

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

在这里插入图片描述

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 容器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 教你如何通过 SSH 连接到 Docker 容器

本文链接: https://www.lsjlt.com/news/163276.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • 教你如何通过 SSH 连接到 Docker 容器
    SSH 是系统管理员工具箱中最常用的命令之一,但它并不常见于 Docker。以下是如何通过 SSH 连接到正在运行的容器,以及为什么在这样做之前应该三思而后行。 你应该在 Dock...
    99+
    2024-04-02
  • 如何通过ssh远程连接docker中的容器
    这篇文章主要介绍“如何通过ssh远程连接docker中的容器”,在日常操作中,相信很多人在如何通过ssh远程连接docker中的容器问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何通过ssh远程连接dock...
    99+
    2023-06-19
  • 查看通过SSH连接到服务器的IP
    有这样一个需求,查看所有通过SSH连接到当前服务器的IP地址。 首先考虑查询所有连接到服务器22端口的IP,然后按照特定格式输出,命令如下。 netstat -atn |grep -i :22 | a...
    99+
    2023-09-03
    服务器 ssh tcp/ip
  • ssh如何连接docker服务器
    这篇文章主要讲解了“ssh如何连接docker服务器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ssh如何连接docker服务器”吧!主要说一下怎么创建一个docker服务,让别人可以通过...
    99+
    2023-06-27
  • Docker如何连接容器
    这篇文章给大家分享的是有关Docker如何连接容器的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。连接容器docker run -dti --name...
    99+
    2024-04-02
  • Redis - php通过ssh方式连接到redis服务器
    应用场景 主要用于使用php通过ssh方式连接到redis服务器,进行一些操作.  学习/操作 1.文档阅读 chatgpt & 其他资料 SSH - 学习与实践探究_ssh应用场景 2....
    99+
    2023-10-18
    php redis ssh
  • 教你如何『SSH』远程连接『内网』服务器
    前言 最近博主实验室要搬家,因为服务器只有连接内网才能使用,所以搬走之后就无法在公网连接使用服务器,确实是让人非常苦恼,所以本文将会主要讲解如何使用公网服务器 SSH 连接内网服务器 系统配置 ...
    99+
    2023-10-11
    frp 内网穿透 内网服务器 内网代理 内网通信
  • Pycharm通过ssh远程连接服务器
    目录 一、概述二、步骤1. 连接服务器2. 设置Python解释器3. 建立Mapping4. 实现代码自动上传 一、概述 笔记本没有英伟达独显,需要跑深度学习的代码,可以使用pych...
    99+
    2023-08-30
    pycharm 服务器 ssh
  • 如何连接docker中的MySQL容器
    目录连接docker中mysql容器docker中MySQL容器启动一 下拉镜像二 运行镜像连接docker中MySQL容器 我以gin web项目为例,演示在容器中运行时mysql的相关配置。 1. 登入MySQL修改...
    99+
    2022-11-30
    连接docker中MySQL容器 docker MySQL容器 MySQL容器连接
  • 如何通过命令行连接到Redis服务器
    要通过命令行连接到Redis服务器,您需要使用redis-cli命令。下面是连接到Redis服务器的步骤: 打开终端或命令提示符窗...
    99+
    2024-04-09
    Redis
  • 教你如何通过SSH在Linux SysOps中部署应用程序
    部署应用程序是Linux系统运维中的重要任务之一,使用SSH可以方便地远程登录到Linux服务器并执行命令。下面是一些基本步骤来通过...
    99+
    2023-10-09
    Linux
  • docker虚拟机中如何使用ssh连接
    本篇内容介绍了“docker虚拟机中如何使用ssh连接”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、安装docker这里就不演示怎么安装...
    99+
    2023-06-27
  • Docker如何使用attach命令连接容器
    这篇文章给大家分享的是有关Docker如何使用attach命令连接容器的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。使用attach命令连接容器docker attac...
    99+
    2024-04-02
  • 无法从其他容器连接到数据库 Postgres Docker 容器
    php小编柚子在使用Docker容器连接到Postgres数据库时,遇到了一个问题:无法从其他容器连接到Postgres Docker容器。这个问题可能会导致开发过程中的阻塞,因此需要...
    99+
    2024-02-09
  • MobaXterm通过SSH Key连接服务器,保存私钥密码
    1.选择私钥 (1)在连接设置中勾选Use private key (2)点击  (3)在弹窗中选择私钥文件  2.配置用户名及私钥密码 (不指定的话,每次连接时都要设置,比较麻烦) (1)勾选Specify username (2)点击...
    99+
    2023-09-13
    ssh 运维 linux 服务器
  • pycharm通过ssh远程连接服务器,并运行代码
    首先连接远程服务器,tool->deplayment->configuration 连接ssh,点击+,选择SFTP,然后取名 点击ssh后面的...
    99+
    2023-09-02
    python ssh Powered by 金山文档
  • 如何限制通过SSH Ubuntu命令远程连接的用户帐号
    这篇文章给大家分享的是有关如何限制通过SSH Ubuntu命令远程连接的用户帐号的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Ubuntu命令,假如你启用了SSH服务,那么任何有有效帐号的用户都可以远程连接。这可...
    99+
    2023-06-17
  • Linux下如何配置Docker容器间网络连接
    本篇内容主要讲解“Linux下如何配置Docker容器间网络连接”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux下如何配置Docker容器间网络连接”吧!Docker容器都是独立的,互相...
    99+
    2023-06-12
  • 如何通过crt远程连接ubuntu
    通过crt远程连接ubuntu的方法:打开终端依次执行以下命令:sudo apt-get install openssh-clientsudo apt-get install openssh-server启动ssh服务。sudo /etc/...
    99+
    2024-04-02
  • 如何利用SSH通道来连接远程的Mysql
    199cloud艾娜分享:如何利用SSH通道来连接远程的Mysql如下所示:一、建立SSH通道只需要在本地键入如下命令:1ssh -fNg -L 3307:127.0.0.1:3306 myuser@remotehost.com...
    99+
    2023-06-01
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作