如何在Docker的CentOS容器中安装SSH服务?

2025-06-04 22:15:05 189
魁首哥

Docker CentOS 容器中安装并安全配置SSH服务指南

核心提示: 在Docker CentOS容器内启用SSH需谨慎评估必要性,容器设计理念更倾向于单一进程,若确需SSH访问,请严格遵循安全规范。


准备工作:启动CentOS容器

启动一个交互式CentOS容器作为操作环境:

docker run -it --name centos-ssh centos:7 /bin/bash

安装OpenSSH服务端

在容器内执行安装命令:

yum update -y && yum install -y openssh-server

关键配置文件修改

  1. 编辑主配置文件

    vi /etc/ssh/sshd_config

    修改以下参数:

    PermitRootLogin yes          # 允许root登录(生产环境强烈建议禁用!)
    UsePAM no                    # 禁用PAM认证
    Port 2222                    # 改用非标准端口(示例)
  2. 解决容器兼容性问题

    sed -i 's/session\s*required\s*pam_loginuid.so/session optional pam_loginuid.so/g' /etc/pam.d/sshd

设置root访问凭证

echo "root:YourStrongPassword" | chpasswd

启动SSH服务

/usr/sbin/sshd -D &

验证服务状态:

netstat -tunlp | grep sshd

持久化容器配置

退出容器后提交为新镜像:

docker commit centos-ssh centos-with-ssh:7

安全启动容器(关键步骤)

docker run -d -p 3322:2222 --restart=always --name sshd-container centos-with-ssh:7 /usr/sbin/sshd -D

参数说明:

  • -p 3322:2222:将宿主机3322端口映射到容器SSH端口
  • --restart=always:确保容器异常退出后自动重启

高级安全加固措施

  1. 禁用root登录(推荐):

    PermitRootLogin no
  2. 创建专用用户

    useradd -m sshuser
    passwd sshuser
  3. 密钥认证替代密码

    mkdir /home/sshuser/.ssh
    echo "ssh-rsa AAAAB3NzaC... user@host" > /home/sshuser/.ssh/authorized_keys
    chmod 700 /home/sshuser/.ssh
    chmod 600 /home/sshuser/.ssh/authorized_keys
  4. 启用防火墙限制

    yum install -y firewalld
    systemctl start firewalld
    firewall-cmd --permanent --add-port=2222/tcp
    firewall-cmd --reload

容器SSH访问流程

  1. 在宿主机连接测试:
    ssh root@localhost -p 3322
  2. 外部设备访问:
    ssh sshuser@your-server-ip -p 3322

运维注意事项

  1. 日志监控
    tail -f /var/log/secure
  2. 服务自启动方案
    echo "/usr/sbin/sshd -D" >> /root/.bashrc

个人观点: 在容器中启用SSH本质上是将容器当作微型虚拟机使用,这与容器轻量化、进程隔离的设计哲学存在冲突,Docker原生操作(exec/logs/stats)应作为管理首选,若确需SSH访问,建议仅限开发调试环境,并务必实施密钥认证、非root用户、端口限制三重防护,生产环境暴露容器SSH端口等同于开启高危入口,须配合网络策略与入侵检测系统协同防护。

经验数据:默认端口SSH服务在公网暴露后,平均每小时遭遇12+次暴力破解尝试,非标准端口可降低90%自动化攻击流量。

分享
海报
189
上一篇:BOSS直聘如何发送简历?下一篇:在表格中怎样画斜线?

忘记密码?

图形验证码