专栏首页Docker - 如何SSH到正在运行的容器

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

##
##创建设置根密码脚本。将其命名为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

如果你的容器上没有安装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 "Key copied"
    • 执行上面应该打印“Key copied”

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

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

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

本文的版权归 Hero 所有,如需转载请联系作者。

我来说两句

0 条评论
登录 后参与评论

相关文章

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

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

    勤奋的小北鼻
  • Docker - 如何使用SSH连接到正在运行中的容器

    本篇文章主要介绍了如何使用SSH将你的Docker容器与其他Docker容器进行连接的方法,如果我忽略了一个或多个重点,请随意评论/建议。

    用户1150262
  • 如何通过SSH进入正在运行的容器【Containers】

    容器已经改变了我们对虚拟化的思考方式。您可能还记得从虚拟化BIOS,操作系统和内核到每个虚拟化网络接口控制器(NIC)的虚拟机已满堆栈的日子(或者您可能还活着)...

    王欣壳
  • 如何在Docker容器中运行Docker [3种方法]

    /var/run/docker.sock是默认的Unix套接字。套接字用于在同一主机上的进程之间进行通信。Docker守护程序默认情况下侦听docker.soc...

    泽阳
  • 进入正在运行的 docker 容器(docker container)

    在使用 docker 容器的时候,我们总会想看看容器内部长什么样子:我们使用 docker exec 命令可以满足我们的期望:

    xuyaowen
  • 复制文件到正在运行的Docker容器中

    通过之前的章节,你已经可以灵活控制容器了,那么在接下来的几篇文章中,我们来练习通过修改容器来创建一个个性化的镜像,然后发布到Dockerhub、阿里云、Azur...

    角落的白板报
  • 如何在Ubuntu 14.04上的Docker容器中运行Nginx

    通过容纳Nginx,我们减少了系统管理员的开销。我们将不再需要通过包管理器管理Nginx或从源代码构建它。Docker容器允许我们在发布新版本的Nginx时简单...

    朝朝
  • 进入正在运行状态中的Docker容器

    我运行一个包含了SpringBoot应用打好的jar包的docker镜像后,在宿主机控制台看到了SpringBoot应用成功启动的调试信息:

    Jerry Wang
  • 运行docker容器遇到的坑

    今天工作中,需要在本机启动consul、zipkin两个容器,参考docker和zipkin两个镜像的说明,很自然地敲出了以下命令:

    jeremyxu

扫码关注云+社区

领取腾讯云代金券