用 Jenkins 通过 SSH 自动部署 Docker 服务,同时确保服务器安全


在现代 DevOps 流程中,自动化部署是必不可少的环节。很多团队会用 Jenkins + Docker Compose 来完成应用的持续交付。然而,如果不注意安全,很容易给服务器带来风险。本文就来讲讲如何 让 Jenkins 自动部署 Docker 服务,同时保证服务器安全

一、问题背景

 

很多团队的部署方式是:

Markup 全选
ssh root@server
cd /opt/myapp
docker compose pull
docker compose up -d

这种方式有几个问题:

  1. 每次发版都需要手动 SSH 登录服务器,效率低。

  2. 直接使用 root 用户风险极高。

  3. 无自动化回滚、审计和权限控制。

因此,我们希望:

  • Jenkins 自动拉取镜像并部署

  • 不使用 root 登录

  • 限制 Jenkins 只能执行安全的命令


二、最佳实践步骤

1. 创建专用部署用户

 

不要用 root 用户,在服务器上创建一个专门用于部署的用户,例如 deploy

Markup 全选
sudo adduser deploy
sudo passwd deploy

然后给它最小权限,只允许管理 Docker:

Markup 全选
sudo visudo
# 添加:
deploy ALL=(ALL) NOPASSWD: /usr/local/bin/docker, /usr/local/bin/docker-compose

这样,即使 Jenkins 被攻破,也不会获得 root 权限。


2. 使用 SSH Key 认证

密码登录容易被破解,应使用 SSH Key

 

  1. 在 Jenkins 服务器生成 Key:

    Markup 全选
    ssh-keygen -t ed25519 -C "jenkins-deploy"
  2. 将公钥加入服务器的 deploy 用户:

    Markup 全选
    mkdir -p /home/deploy/.ssh
    chmod 700 /home/deploy/.ssh
    echo "PUBLIC_KEY_CONTENT" >> /home/deploy/.ssh/authorized_keys
    chmod 600 /home/deploy/.ssh/authorized_keys
    chown -R deploy:deploy /home/deploy/.ssh
  3. 禁止密码登录和 root 登录:

    编辑 /etc/ssh/sshd_config

    Markup 全选
    PasswordAuthentication no
    PermitRootLogin no

    重启 SSH:

    Markup 全选
    sudo systemctl restart sshd

 

3. 限制 Jenkins 执行命令

为保证安全,不要让 Jenkins 登录后随意执行命令。可以写一个白名单脚本 /usr/local/bin/deploy.sh

Markup 全选
#!/bin/bash
cd /opt/myapp
docker compose pull
docker compose up -d

然后在 sudoers 中允许 Jenkins 执行:

Markup 全选
deploy ALL=(ALL) NOPASSWD: /usr/local/bin/deploy.sh

4. 在 Jenkins 中配置 SSH Key

    1. Jenkins → Credentials → SSH Username with private key
    2. 在 Pipeline 中使用:
      Markup 全选
      pipeline {
          agent any
          stages {
              stage('Deploy') {
                  steps {
                      sshagent(['deploy-key-id']) {
                          sh "ssh deploy@server '/usr/local/bin/deploy.sh'"
                      }
                  }
              }
          }
      }

      这样 Jenkins 就可以自动部署 Docker 服务,无需手动 SSH 登录。

 

5. 可选安全增强

  • 限制 IP 白名单:只允许 Jenkins 服务器访问 SSH
  • 开启登录审计:/var/log/auth.log 或 /var/log/secure
  • 使用 Fail2ban 防暴力破解
  • Docker 容器内部尽量不使用 root
  • 定期更换 SSH Key

 

三、总结

通过上面的配置,你可以实现:

  1. Jenkins 自动拉取镜像并部署 Docker 服务

  2. 不使用 root,部署用户权限最小化

  3. 限制可执行命令,防止被滥用

  4. 自动化安全可控,支持回滚与审计

这种方式既提高了部署效率,也大幅降低了服务器被入侵的风险,是生产环境推荐的做法。

 

 

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
张国生
上一篇:Docker中安装SqlServer后数据库备份错误
下一篇:没有了
评论列表

发表评论

评论内容
昵称:
关联文章

Jenkins 通过 SSH 自动部署 Docker 服务同时确保服务器安全
.NET 微服务——CI/CD(1):Jenkins+Gitee自动构建
Docker 私有镜像仓库 二:Harbor部署
CentOS7部署OpenVPN服务
.NET 微服务——CI/CD(3):镜像自动分发
C# .net项目Docker方式部署
JAVA环境部署
LInux Jenkins安装
.NET 微服务——CI/CD(2):自动打包镜像
服务器安全:限制外网访问解决方案
使用.NET 6开发TodoList应用(30)——实现Docker打包和部署
部署服务器的要求清单
如何从Gitblit服务器恢复Git仓库:不需要重新部署
Jenkins初始配置
window server部署open VPN
docker安装mysql
GZUpdate自动升级服务 .NET C/S Winform客户端程序自动升级演示
FTP服务端软件 Xlight
SUSE开启SSH
重新认识Docker Compose之Sidecar模式

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码