Ubuntu云服务器镜像的登录凭证

40

我正在尝试使用虚拟机构建云基础设施。

在Openstack手册中提到,此链接中的映像包含预安装的Openstack。

我下载了trusty-server-cloudimg-amd64-disk1.img文件,并使用KVM加载它。我使用此镜像实例化了一台虚拟机,但我无法登录(使用控制台)或通过ssh连接。

我不知道该操作系统的默认用户名和密码。

另外(一个不同的问题),我想使用这两个虚拟机构建云,可以使用相同的映像吗?

7个回答

29

使用cloud-localds逐步设置18.04

简而言之,您需要在主机上进行以下操作:

sudo apt-get install cloud-image-utils

cat >user-data <<EOF
#cloud-config
password: asdfqwer
chpasswd: { expire: False }
ssh_pwauth: True
EOF

cloud-localds user-data.img user-data

# user-data.img MUST come after the rootfs. 
qemu-system-x86_64 \
-drive file=ubuntu-18.04-server-cloudimg-amd64.img,format=qcow2 \
-drive file=user-data.img,format=raw \
-m 1G
...

现在您可以使用以下信息登录:

  • 用户名:ubuntu
  • 密码:asdfqwer

这里我描述了一个完整的、最小详细工作的 QEMU 示例:https://askubuntu.com/questions/281763/is-there-any-prebuilt-qemu-ubuntu-image32bit-online/1081171#1081171

在 Ubuntu 18.04 主机上进行测试。


2
仍然无法在Ubuntu 20.04.3中登录。显示“登录不正确”。有任何想法为什么会这样? - watney
1
@watney 我在Ubuntu 21.04上进行了快速尝试,但它并没有立即生效。如果你找到其他解决方法,请告诉我。那些Ubuntu云镜像太不稳定了。 - Ciro Santilli OurBigBook.com
1
相同的步骤已验证适用于Ubuntu 20.04。 - slogan621
在20.04版本中,ssh登录可行,但控制台登录不行。仍然无法弄清楚这个问题。 - Rino Bino
1
适用于22.04(jammy-server-cloudimg-amd64.img)。我更喜欢-hda-hdb选项:qemu-system-x86_64 -hda ubuntu-18.04-server-cloudimg-amd64.img -hdb user-data.img -m 1G -enable-kvm。 我注意到密码保存在Ubuntu磁盘中,因此我们无法在启动后更改“user-data”中的“password”。 - wataash
我的发行版中没有 cloud-image-utils,如果提供 user-data.img 的下载链接就太感激了。 - secondperson

22

8
Ubuntu镜像的默认用户名是ubuntu
没有默认密码,您无法使用用户名/密码通过ssh连接到机器或通过VNC控制台连接。您必须使用SSH公钥/私钥身份验证方法。此外,ubuntu账户的sudo权限提升不需要密码。
首次访问虚拟机后,您可以更改这些设置并启用用于ssh的用户名/密码身份验证。
关于您的第二个问题,
是的,您可以将同一镜像用于多个虚拟机。

2
如何使用公钥/私钥身份验证方法?如果我使用ssh-copy-id -p 2222 ubuntu@localhost,其中2222是重定向的ssh端口,我会收到“Permission denied(public key)”的错误提示。 - hlitz
16
我尝试使用 http://cloud-images.ubuntu.com/xenial/20161029/ 上的 xenial-server-cloudimg-arm64-uefi1.img 镜像:登录名“ubuntu”无法使用,然后要求输入密码,我尝试了空密码,但它显示“登录不正确”。 - Serge Rogatch
2
@Athafoud,我不认为我正在使用SSH。我只是在QEmu中启动了虚拟机,并使用它启动的终端。 - Serge Rogatch
@SergeRogatch,情况正是如此,您不能使用终端。您唯一的选择是配置和使用ssh。 - Athafoud
1
@SergeRogatch 是的,我认为那样会更好。 - Athafoud
显示剩余5条评论

8
挂载镜像,然后在 chroot 环境中使用 chpasswd 是我最容易的解决方案:
modprobe nbd max_part=8 && qemu-nbd -c /dev/nbd0 image.raw && mkdir a && mount /dev/nbd0p1 a
chroot a sh -c "echo 'root:password' | chpasswd"
umount ./a && rmdir a && qemu-nbd -d /dev/nbd0

这是最整洁的方式。 - undefined

1

在我的情况下,virt-customize 失败了,我使用 virt-sysprep 设置了密码。

cp ubuntu-21.04-server-cloudimg-amd64.img wen3.img
chown qemu:qemu wen3.img

virt-sysprep --root-password password:1 --uninstall cloud-init --selinux-relabel -a wen3.img --network --hostname=wen3

virt-install \
    --import  \
    --name wen3 \
    --ram=16384 \
    --vcpus=16 \
    --accelerate \
    --network network:default,model=virtio \
    --mac 02:ca:fe:fa:ce:33 \
    --debug \
    --wait 0 \
  --console pty \
    --disk path=/var/lib/libvirt/images/wen3.img,bus=virtio,size=100 \
    --os-variant centos7.0

1
以下代码可用于使Ubuntu的cloudimg在Debian 7.2(wheezy)机器上可用:
apt-get install pwgen
apt-get install genisoimage
git clone -b master https://git.launchpad.net/cloud-utils

printf "#cloud-config\n" > user-data
printf "password: `pwgen 8 1`\nchpasswd: { expire: False }\nssh_pwauth: True\n" >> user-data
./cloud-utils/bin/cloud-localds user-data.img user-data

随后,您可以从tmux窗口中启动该镜像,以确保即使您注销,它也会继续运行: kvm -m 2048 -smp 2 -hda ubuntu-18.10-server-cloudimg-amd64.img -hdb user-data.img -net nic -net user,hostfwd=tcp::1810-:22 -nographic 然后,您可以使用在user-data文件中生成的密码作为用户ubuntu登录到机器。登录可以通过kvm打印的串行控制台(即使您在其上面有一个ssh连接,它通常也会非常慢)或通过sshssh ubuntu@localhost -p1810进行。默认情况下,用户ubuntu具有无需密码的以root身份访问sudo的权限。

P.S. 我也尝试过添加 ssh-authorized-keys,但是 cloud-config 格式似乎非常脆弱,在顶层被忽略,而在以下的 users: 级别下,整个 ubuntu 用户似乎会出问题(至少它的密码部分)。以下是将密钥转换为可能可读取 cloud-config 的格式的代码:

printf "users:\n  - name: ubuntu\n    ssh-authorized-keys:\n" >> user-data
cat ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys | sed 's/^/      - /g' >> user-data

(请注意,显然密码可能不是用户规范的有效字段,因为它具有passwd哈希值,因此整个代码块会崩溃,因为现在用户ubuntu将被创建而没有密码。)

0

以下是有关如何首次登录新的Ubuntu实例的详细信息,以补充@Athafoud的答案。

在OpenStack GUI中,您可以在“项目”>“计算”>“访问和安全性”下管理您的公共/私有密钥。创建一个SSH密钥(例如,在Linux或macOS下使用ssh-keygen),然后通过单击“导入密钥对”将其添加到OpenStack密钥中。(或者您可以从OpenStack GUI内部“创建密钥对”,然后将密钥导出到您的工作站。)

当您创建新实例(VM)时,您必须指定此密钥作为您首次登录时要使用的“密钥对”。

一旦您的新实例已启动并运行,可以通过以下方式通过SSH连接到它:

ssh -i <keyfile> ubuntu@<instance>

其中<keyfile>是您与实例关联的SSH密钥的名称,而<instance>是实例的主机名或IP地址。此命令会在不要求密码的情况下将您登录到实例上的ubuntu帐户。

Ubuntu用户拥有sudo权限,因此您可以在登录后键入sudo -i来成为root,并随心所欲地管理虚拟机 :-).


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接