根据GitHub前人经验[重置 Ubuntu VM 密码不起作用]和官网文档System preparation for Linux
执行以下操作:
最好在创建主机时名称就改为localhost,如为其他则编辑/etc/hosts删除其他主机名。Ubuntu
apt-get update apt-get upgrade -y apt-get install -y acpid ntp hostname localhost echo "localhost" > /etc/hostnameCentos
yum update -y hostname localhost echo "localhost" > /etc/hostname对于 CentOS,必须从接口配置文件
/etc/sysconfig/network-scripts/ifcfg-eth0中获取唯一标识。任何以 \<VALUE\> 开头的条目都应删除。echo "DEVICE=eth0 TYPE=Ethernet BOOTPROTO=dhcp ONBOOT=yes" > /etc/sysconfig/network-scripts/ifcfg-eth0根据文档Linux with Cloud-init 添加cloud-init 管理程序
Centosyum install -y cloud-init wgetUbuntu
apt-get install -y cloud-init wget在
/etc/cloud/cloud.cfg.d/99_cloudstack.cfg中添加datasource_list: [ ConfigDrive, CloudStack, None ] datasource: CloudStack: {} None: {}添加cloud-init密码管理程序,每次启动时启用 set_passwords 模块
sudo sed -i s/" - set[_|-]passwords"/" - [set_passwords, always]"/g /etc/cloud/cloud.cfg删除自定义用户,myuser为用户名
deluser myuser --remove-home指定管理用户,编辑
/etc/cloud/cloud.cfg.d/80_user.cfg,添加以下代码system_info: default_user: name: cloud-user lock_passwd: false # disable user password login - true/false sudo: [ALL=(ALL) ALL] # User permissions disable_root: 1 # root remote login is 0 - enabled, 1 - disabled ssh_pwauth: 1 # password login is 0 - disabled, 1- enabledname是之后模板启用的用户名,所有系统桌面版不建议设置为root,默认不允许桌面登录。
SSH 密钥管理
sudo sed -i s/" - ssh$"/" - [ssh, always]"/g /etc/cloud/cloud.cfg echo "ssh_deletekeys: false" > /etc/cloud/cloud.cfg.d/49_hostkeys.cfg分区管理,如果在安装时没有选择lvm,则此条无法配置,影响扩容后自动分区,可能需要手动分区。
Centos安装Growpart 模块yum install cloud-utils-growpart -yUbuntu安装Growpart 模块
apt-get install cloud-initramfs-growroot -y检测并扩展 MBR 分区,主要观察pvs里PV项
**Centos** [root@localhost ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root centos -wi-ao---- <17.00g swap centos -wi-ao---- 2.00g [root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree centos 1 2 0 wz--n- <19.00g 0 [root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/xvda2 centos lvm2 a-- <19.00g 0 **Ubuntu** [root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/vda3 ubuntu lvm2 a-- <19.00g 0编辑
/etc/cloud/cloud.cfg.d/50_growpartion.cfggrowpart: mode: auto devices: - \"/dev/vda3\" ignore_growroot_disabled: false扩展物理卷、卷组和根lvm,编辑
/etc/cloud/cloud.cfg.d/51_extend_volume.cfg,注意路径是否存在
Centosruncmd: - [ cloud-init-per, always, grow_VG, pvresize, /dev/xvda2 ] - [ cloud-init-per, always, grow_LV, lvresize, -l, '+100%FREE', /dev/centos/root ] - [ cloud-init-per, always, grow_FS, xfs_growfs, /dev/centos/root ]Ubuntu
runcmd: - [ cloud-init-per, always, grow_VG, pvresize, /dev/xvda3 ] - [ cloud-init-per, always, grow_LV, lvresize, -l, '+100%FREE', /dev/ubuntu-vg/ubuntu-lv ] - [ cloud-init-per, always, grow_FS, xfs_growfs, /dev/ubuntu-vg/ubuntu-lv ]上面的示例代码基于 XFS 分区类型。如果使用 ext4 分区,请在最后一行代码中将xfs_growfs替换为resize2fs。可以通过命令
parted -l查看分区。
其中Centos默认根卷为/dev/centos/root,Ubuntu默认根卷为/dev/ubuntu-vg/ubuntu-lv,或者通过命令lvdisplay查看,其中LV Path就是根卷路径。
系统需要安装lvm2,才有以上命令,Debian需要在~/bashrc里添加export PATH=$PATH:/sbin:/usr/sbin,**
设置每次启动时启用自动调整大小,默认情况下,cloud-init runcmd模块仅在首次启动时执行定义的命令。仅当runcmd和用户脚本模块都配置为在每次启动时运行时,命令才会在每次启动时运行。
sudo sed -i s/" - runcmd"/" - [runcmd, always]"/g /etc/cloud/cloud.cfg sudo sed -i s/" - scripts-user"/" - [scripts-user, always]"/g /etc/cloud/cloud.cfg实现所需的 cloud-init 功能后,清理 cloud-init 跟踪器文件
rm -rf /var/lib/cloud/* rm -rf /etc/sudoers.d/*模板清理
删除 udev 持久设备规则
Centosrm -f /etc/udev/rules.d/70* rm -f /var/lib/dhclient/*Ubuntu
rm -f /etc/udev/rules.d/70* rm -f /var/lib/dhcp/dhclient.*删除 SSH 密钥
rm -f /etc/ssh/*key*清理日志文件
cat /dev/null > /var/log/audit/audit.log 2>/dev/null cat /dev/null > /var/log/wtmp 2>/dev/null logrotate -f /etc/logrotate.conf 2>/dev/null rm -f /var/log/*-* /var/log/*.gz 2>/dev/null设置用户密码过期
passwd --expire root清除用户历史记录
history -c unset HISTFILE关闭虚拟机,选择ROOT卷并创建模板,打开密码已启用选项。