如何使用virt-sysprep将SSH密钥添加到qcow2 Linux云镜像

时间:2020-01-09 14:16:50  来源:igfitidea点击:

我在Ubuntu Linux上安装并设置了KVM服务器。
我下载了各种.qcow2云镜像。
如何使用virt-sysprep为下载的CentOS/FreeBSD/Ubuntu云镜像设置公共ssh密钥?
解决方法:您需要使用一个名为virt-sysprep的命令,该命令可让您重置或取消配置虚拟机以准备克隆虚拟机。

步骤1:安装virt-sysprep

执行以下apt-get命令/apt命令以在Debian或Ubuntu Linux上安装virt-sysprep:

$ sudo apt install libguestfs-tools

如果您使用的是CentOS/RHEL/Oracle/Scientific Linux,请输入以下yum命令:

$ sudo yum install libguestfs-tools

如果您使用的是Fedora Linux,请执行以下dnf命令进行安装:

$ sudo dnf install libguestfs-tools

第2步:下载.qcow2格式的云镜像

您可以从以下站点获取云镜像(获取以.qcow2/.qcow2.xz扩展名结尾的文件):

  • CentOS的7
  • CentOS 6.x版
  • Debian 8.x
  • Debian 9.x
  • Fedora 26
  • Ubuntu 16.04 LTS
  • FreeBSD 11.x
  • openSUSE/SLES
  • AWS Linux
  • RHEL 7(仅限订阅)
  • RHEL 6(仅限订阅)
  • SLES(仅订阅)

出于演示目的,我使用wget命令下载并使用CentOS 7镜像:

$ wget https://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2.xz

使用xz命令解压缩:

$ xz -v -d CentOS-7-x86_64-GenericCloud.qcow2.xz

步骤3:设定/插入ssh键

注入ssh密钥,以便给定的USER可以通过ssh登录而无需提供密码。

USER必须已经存在于访客中。
对于CentOS 7,用户名是centos:

$ sudo virt-sysprep -a CentOS-7-x86_64-GenericCloud.qcow2 \
--ssh-inject centos:file:/home/Hyman/.ssh/id_rsa.pub

其中:

  • --ssh-inject centos:file:/home/Hyman/.ssh/id_rsa.pub:从id_rsa.pub读取ssh密钥。

也可以创建一个名为Hyman的新用户并添加ssh-key,如下所示:

$ sudo virt-sysprep -a CentOS-7-x86_64-GenericCloud.qcow2 \
--run-command 'useradd Hyman' \
--ssh-inject Hyman:file:/home/Hyman/.ssh/id_rsa.pub

输出示例:使用virt-sysprep将SSH密钥添加到Linux KVM云用户插孔

步骤4:使用CentOS-7-x86_64-GenericCloud-1503.qcow2镜像启动新的VM

语法为:

$ virt-install --import \
--name centos7-vm1 \
--memory 1024 \
--vcpus 2 \
--cpu host \
--disk path=/var/lib/libvirt/images/centos7.qcow2,size=10,bus=virtio,format=qcow \
--os-type=linux \
--os-variant=centos7.0 \
--graphics spice \
--noautoconsole \
--disk /home/Hyman/modifyisoimages/CentOS-7-x86_64-GenericCloud.qcow2

步骤5:使用ssh测试

要查找您的vms IP地址,请运行:

$ virsh net-list
$ virsh net-dhcp-leases default

要使用ssh命令登录:

$ ssh Hyman@vms-ip-address-here

为您的云镜像设置SSH密钥的其他选项

  • 在Ubuntu Linux上使用uvt-kvm为云镜像设置ssh-key。
  • 使用cloudinit设置ssh密钥