前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker - 如何使用SSH连接到正在运行中的容器

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

作者头像
用户1150262
发布2018-01-08 13:21:00
5.2K0
发布2018-01-08 13:21:00

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

以下是本篇文章中的几个重要步骤:

  • 如何安装SSH

  • 在现有容器上运行SSH的方法

  • 使用SSH连接到其他运行中容器的方法

如何安装SSH

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

代码语言:javascript
复制
## 

## 安装 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
代码语言:javascript
复制
##

## 创建一个设置根密码的脚本,将其命名为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 "========================================================================"

代码语言:javascript
复制
##

## 使用以下内容创建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后台运行。

完成了上述步骤,这时我们应该打开docker容器的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连接到其他运行中容器的方法

按照上述步骤在现有容器上安装了SSH并打开了22端口之后,请执行以下操作以从另一个容器测试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 条评论
热度
最新
推荐阅读
目录
  • 在现有容器上启用SSH的方法
  • 使用SSH连接到其他运行中容器的方法
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档