Docker - 如何SSH连接到正在运行的容器

本文包含有关如何让Docker容器使用SSH与其他Docker容器连接的说明。如果我没有提到一个或多个重点,请随意评论/建议。

以下是本文稍后介绍的要点:

  • 说明安装SSH
  • 在现有容器上启用SSH的技巧
  • SSH到运行容器的技巧

说明安装SSH

如果你已经有一个正在运行的容器,并且你想通过SSH进行SSH连接并允许其他的Docker容器通过SSH进行连接,那么下面是一组安装SSH的指令:

## 
## 安装openssh-server和epel-release
##
yum -y install openssh-server epel-release
yum -y install pwgen
rm -f /etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_rsa_key
ssh-keygen -q -N "" -t dsa -f /etc/ssh/ssh_host_ecdsa_key
ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_rsa_key 
sed -i "s/#UsePrivilegeSeparation.*/UsePrivilegeSeparation no/g" /etc/ssh/sshd_config
sed -i "s/UsePAM.*/UsePAM yes/g" /etc/ssh/sshd_config
ssh-keygen -A
##
## 创建脚本设置root密码,命名为set_root_pw.sh, 将其保存在一个文件夹中。
##
#!/bin/bash
if [ -f /.root_pw_set ]; then
echo "Root password already set!"
exit 0
fi
PASS=${ROOT_PASS:-$(pwgen -s 12 1)}
_word=$( [ ${ROOT_PASS} ] && echo "preset" || echo "random" )
echo "=> Setting a ${_word} password to the root user"
echo "root:$PASS" | chpasswd
echo "=> Done!"
touch /.root_pw_set
echo "========================================================================"
echo "You can now connect to this CentOS container via SSH using:"
echo ""
echo "    ssh -p  root@"
echo "and enter the root password '$PASS' when prompted"
echo ""
echo "Please remember to change the above password as soon as possible!"
echo "========================================================================"
##
## 使用以下内容创建run.sh文件并将其保存在与set_root_pw.sh相同的文件夹中
##
#!/bin/bash
if [ "${AUTHORIZED_KEYS}" != "**None**" ]; then
    echo "=> Found authorized keys"
    mkdir -p /root/.ssh
    chmod 700 /root/.ssh
    touch /root/.ssh/authorized_keys
    chmod 600 /root/.ssh/authorized_keys
    IFS=
\n'
    arr=$(echo ${AUTHORIZED_KEYS} | tr "," "\n")
    for x in $arr
    do
        x=$(echo $x |sed -e 's/^ *//' -e 's/ *$//')
        cat /root/.ssh/authorized_keys | grep "$x" >/dev/null 2>&1
        if [ $? -ne 0 ]; then
            echo "=> Adding public key to /root/.ssh/authorized_keys: $x"
            echo "$x" >> /root/.ssh/authorized_keys
        fi
    done
fi
if [ ! -f /.root_pw_set ]; then
/set_root_pw.sh
fi
exec /usr/sbin/sshd -D

如果你的Docker上没有安装yum,请使用wget下载。另外,上面的工作在CentOS容器上也很好。

在现有容器上启用SSH的技巧

完成上述操作后,就可以运行SSH守护程序了。

  • 转到由上面创建的文件组成的文件夹,如set_root_pw.sh和run.sh
  • 使用以下命令更改模式:chmod + x ./*.sh
  • 在shell提示符下执行run.sh脚本:./run.sh
  • 建议使用nohup运行它,以便sshd在后台运行。

一旦完成上述,是时候从容器开放端口22。以下是你如何开放22端口:

  • 从容器中退出
  • 使用以下命令提交Docker容器镜像:docker commit <container_name> <some_image_name>
  • 使用以下命令运行一个新的容器:docker run -ti -d -P -p 22:22 -name <new_container_name> -v / c / Users:/ mnt / Users <new_image_name_saved> / bin / bash

SSH到运行容器的技巧

在使用上述步骤在现有容器和开放端口22上安装SSH之后,请执行以下操作以从另一个容器测试SSH:

  • 按照以上步骤安装SSH,配置并开放端口22
  • 如果要连接而不需要输入密码,请执行以下命令:
    • ssh-keygen -t rsa
    • cat〜/ .ssh / id_rsa.pub | ssh <其他Docker容器的用户名> @其他Docker容器的IP>' ‘cat >> .ssh/authorized_keys && echo “密钥已复制”‘
    • 执行上面应该打印“密钥已复制”

完成上述操作后,继续使用SCP测试SSH连接:

  • scp /tmp/somefile.txt <其他Docker容器的用户名> @其他Docker容器的IP>:/ tmp
  • 以上执行将文件发送到其他Docker容器的/ tmp文件夹

我希望你发现这篇文章对于使用SSH将一个Docker容器连接到其他Docker容器很有帮助请随时分享您的意见。

本文的版权归 勤奋的小北鼻 所有,如需转载请联系作者。

编辑于

勤奋的小北鼻的专栏

0 篇文章1 人订阅

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏静默虚空的博客

图解使用VS的安装项目打包程序

背景 这段时间一直在做客户端程序的打包程序,遇到各种坑。因为以前没有任何这方面的经验,历经各种折腾,费尽九牛二虎之力总算是完成了。 虽然没有太多技术含量,但是因...

1715
来自专栏13blog.site

Spring+SpringMVC+MyBatis+easyUI整合基础篇(四)代码简化

作者:13 GitHub:https://github.com/ZHENFENG13 版权声明:本文为原创文章,未经允许不得转载。 前言 项目展示地址,点这里...

2666

Docker - 如何SSH到正在运行的容器

本文包含有关如何让Docker容器使用SSH与其他Docker容器连接的说明。如果我没有提到一个或多个重点,请随意评论/建议。

20110
来自专栏微服务

Centos环境下搭建Asp.NET Core环境和安装Jexus

   .NET Core2.0出来以后,很多公司开始用于实践生产,其中的原因想必大家都明白,最主要的一下几点。 跨平台,能够部署在Linux和Docker容器中...

29910
来自专栏小樱的经验随笔

kali 2018.1安装教程

00x01 摘要 Kali-linux系统,渗透测试人员的利器,其官网自称 OurMost Advanced Penetration Testing Distr...

3116
来自专栏分布式系统和大数据处理

基于Docker的持续集成方案(安装和配置docker镜像仓库) - Part.5

在《基于Docker的持续集成方案(介绍) - Part.1》中,有一个安装和配置环节,即私有的docker镜像仓库,本文将对此进行介绍。

654
来自专栏L宝宝聊IT

构建SSH服务体系示例

1585
来自专栏编程

centos系统安装Python

CentOS 6.5安装Python2.7.14 大家好,周五到了,明天终于可以好好的放松一下了,而且,还是三天的长假哦!自从毕业以后再也没有超过七天的假期了。...

19510
来自专栏圣杰的专栏

.NET Core容器化@Docker

温馨提示:本文适合动手演练,效果更佳。 ?  1. 引言 我们知道. NET Core最大的特性之一就是跨平台,而对于跨平台,似乎大家印象中就是可以在非Wi...

2267
来自专栏乐百川的学习频道

在Windows上搭建Go开发环境

Go语言是由谷歌开发的一个高性能、跨平台的编程语言。 安装Go 首先先来安装一下Go语言的SDK,目前Go语言的最新版本为Go 1.8.3 。Go下载页面列出了...

1827

扫码关注云+社区