1.1 准备云账号(阿里云/腾讯云/AWS/OpenStack等),开通镜像与实例权限;
1.2 安装并配置对应CLI(aliyuncli/awsclicloud/openstackclient),并且能通过SSH登录云上临时主机;
1.3 目标:制作一个标准跳板机(限制访问、记录审计、只允许密钥登录),打包成云端镜像/模板,实现快速部署。
2.1 通过云厂商镜像市场直接选择官方Ubuntu/CentOS镜像;
2.2 若需离线或自定义,可到Ubuntu官网下载cloud image(例如:ubuntu-20.04-server-cloudimg-amd64.img),并使用qemu-img转换成合适格式:
示例命令:qemu-img convert -f qcow2 -O raw ubuntu-20.04-server-cloudimg-amd64.img ubuntu.raw
3.1 在控制台或CLI上使用基础镜像启动一台临时实例,配置安全组开放22端口(仅临时用于制作);
3.2 通过密钥或临时密码SSH登录:ssh -i ~/.ssh/id_rsa ubuntu@
3.3 更新系统并安装必要工具:sudo apt update && sudo apt install -y cloud-init bash-completion auditd rsyslog
4.1 创建专用用户并禁止密码登录:sudo adduser jumpuser && sudo usermod -aG sudo jumpuser;
4.2 配置SSH仅允许密钥登录:编辑 /etc/ssh/sshd_config,将 PasswordAuthentication no、PermitRootLogin no;然后 sudo systemctl restart sshd;
4.3 配置sudo无密码(谨慎):echo 'jumpuser ALL=(ALL) NOPASSWD:ALL' | sudo tee /etc/sudoers.d/jumpuser
5.1 安装auditd并配置规则记录sudo/ssh行为:sudo apt install -y auditd audispd-plugins;
5.2 添加常用规则示例:sudo bash -c "echo '-w /etc/sudoers -p wa -k sudoers' >> /etc/audit/rules.d/audit.rules";
5.3 配置日志转发(可选)到集中化日志系统(rsyslog -> ELK/CloudWatch),保证审计日志不丢失。
6.1 在实例上创建cloud-init user-data模板(示例):
#cloud-config users: - name: jumpuser sudo: ["ALL=(ALL) NOPASSWD:ALL"] shell: /bin/bash ssh_authorized_keys: - ssh-rsa AAAA... your-key disable_root: true ssh_pwauth: false packages: - auditd runcmd: - systemctl enable auditd - systemctl restart sshd
6.2 验证cloud-init是否生效:sudo cloud-init analyze show
7.1 清理历史日志与SSH host key(防止重用冲突):sudo cloud-init clean --logs && sudo rm -f /etc/ssh/ssh_host_*;
7.2 清理临时文件、APT缓存:sudo apt clean && sudo rm -rf /tmp/* /var/tmp/*;
7.3 关机并在控制台创建快照/镜像:sudo shutdown -h now,然后在云厂商控制台选择实例创建自定义镜像(或通过CLI如 openstack image create / aws ec2 create-image)。
8.1 在云控制台创建“镜像”后,进入“实例模板/启动模板”创建页面;
8.2 填写镜像ID、规格、网络、密钥对、用户数据(可复用cloud-init模板),并绑定安全组(只开放管理IP范围的22端口和必要端口);
8.3 保存为模板,命名规则建议包含版本号和日期,例如 jump-ami-2026-09-30。
9.1 使用模板快速部署新实例:在控制台选择“基于模板创建实例”或使用CLI(aws ec2 run-instances --launch-template LaunchTemplateId=lt-xxx);
9.2 首次登录检验cloud-init是否注入指定公钥、用户和审计配置;
9.3 验证安全策略:确认passwd登录被禁用、审计日志生效、网络访问仅限跳板机允许的来源IP。
问:如何保证镜像中不会带有敏感信息(如私钥、历史日志)?
答:在制作镜像前务必执行 cloud-init clean --logs、删除 /home/*/.ssh/authorized_keys(如果是模板应注入公钥而非私钥)、清空 /var/log/* 与 apt 缓存,确保没有硬编码的密钥或凭证。并在CI流程中加入镜像检测工具扫描敏感信息。
问:如果需要在多云环境中统一跳板机镜像,有何建议?
答:建议使用Packer制作可复用镜像构建流程,输出不同云厂商所需格式(AMI、镜像、OpenStack Glance),将cloud-init作为运行时配置入口,模板里只注入最小配置,运行时通过user-data加载审计与额外脚本。
问:如何实现自动化周期更新跳板机镜像(补丁/软件更新)?
答:在CI/CD中定期触发镜像重建流水线(例如每周或每月),步骤包括拉取基础镜像、应用安全补丁/配置、运行自动化测试、生成新镜像并自动替换启动模板,最终由配置管理工具或滚动重启策略逐步替换生产实例,确保无停机可回滚。