多通道实例的登录名和密码

多通道实例的登录名和密码

我是 ubunto 新手,想在 VM 中运行它,因此已成功安装了 multipass,并在 Hyper V 中运行了 ubunto VM。连接到 VM 时,系统要求我输入登录名和密码,是否有默认的?或者我可以从 multipass 命令行设置它们吗?我在文档中找不到任何信息。

我也尝试在命名的运行实例上使用 shell,但连接失败,并显示消息“ssh 连接失败:'无法解析主机名 primary.mshome.net(没有已知此主机。)”然后我尝试仅使用“multipass shell”命令创建一个实例。它创建了一个正在运行的主实例,结果相同。

欢迎提出任何建议

答案1

这可能有点晚了,但您可以从 multipass 登录实例,而无需输入用户名和密码。从那里,您可以设置密码,以便使用 Hyper V 登录。

首先找到您的实例的名称

multipass list

然后通过多通道登录实例

multipass shell <instance name>

接下来你可以为默认的 ubuntu 用户设置密码

sudo passwd ubuntu

现在,当您尝试使用 hyper v 登录时,只需使用ubuntu用户名和您设置的密码即可。

答案2

对于 shell 连接问题,我建议您检查 Windows 中的 host.ics 文件 (C:\WINDOWS\System32\drivers\etc\hosts.ics)。如果您在那里发现重复的条目,请删除最后的条目并尝试重新连接。通常这可以解决问题,并且您会看到使用下一个命令再次显示实例的 IP:

multipass list

关于 ubuntu 密码,我认为通过 ssh 需要任何密码,但通过 Hyper-V 的“直接访问”则需要,正如您所说。可能无法使用密码登录,因为默认的 ubuntu 密码配置为“--disabled”

答案3

结论

如果多通道 shell 无法正常工作,您可以通过 ssh 连接。

ssh ubuntu@vm-ip-address -i /var/snap/multipass/common/data/multipassd/ssh-keys/id_rsa

Multipass 实例默认没有可用的密码。

$ passwd --status ubuntu
ubuntu L 04/03/2021 0 99999 7 -1

L 表示密码锁定。

这是故意

如果您因某种原因失去了对虚拟机的访问权限(例如,搞乱了网络配置,我就遇到过这种情况:D)。

您可以使用默认的 ssh 私钥登录。您可以在以下位置找到私钥:

/var/snap/multipass/common/data/multipassd/ssh-keys/id_rsa

如果您通过 snap 安装它。

您也可以使用定位来找到它。

$ locate id_rsa | grep multipass

并使用 ssh 连接到虚拟机:

ssh ubuntu@vm-ip-address -i /var/snap/multipass/common/data/multipassd/ssh-keys/id_rsa

您可能需要将 ssh 密钥的所有权更改为您的用户帐户。我的当前设置为 root。


要找到虚拟机 IP 地址,这取决于后端。我使用的是 libvirt。

virsh net-dhcp-leases default

答案4

为了实现自动化,您可以将自己的 ssh 密钥安装到多通道 VM。这很有用,因为最近的 ubuntu 映像上禁用了密码验证。因此,在没有 ssh 密钥验证的情况下 ssh 到 VM 时,您将得到类似以下内容:

[email protected]: Permission denied (publickey).

以下是一句话:

cat ~/.ssh/yourssh.pub | multipass exec $vm_instance -- bash -c 'cat >> ~/.ssh/authorized_keys'

解释:

  1. cat ~/.ssh/yourssh.pub获取你最喜欢的 ssh 密钥的内容(如果你还没有密钥,可能需要创建一个),它将在下一个命令中通过 stdin 传输
  2. multipass exec $vm_instance -- bash -c在虚拟机上执行 bash,前一个命令的标准输出cat附加到 bash 的标准输入。-c将在虚拟机内执行下一个命令
  3. cat >> ~/.ssh/authorized_keys在虚拟机上执行的远程命令:它获取 stdin 的内容(管道 ssh 公钥)并附加到>>本地~/.ssh/authorized_keys,这是存储授权连接的密钥的文件。由于 sshd 已安装,因此该文件存在并且已具有 sshd 所需的正确权限和所有权。

测试一下:

ssh ubuntu@$ip_of_the_vm

并且(如果您的ssh-agent或 ssh 相关配置运行良好)您就可以进入新的 VM 了!

想要更多自动化吗?

好了,走吧!云初始化这里有个技巧,而不是通过管道传输 ssh 公钥VM 已创建,您可以请求multipass处理它在创建时。而且它是可重复使用的。我不会在这里详细介绍所有额外的知识,如 yaml 语法和相关内容,但您可以开始:

编辑:最初发布的示例用于/home/ubuntu/sshkey.pub 将密钥存储为本地文件。

这会产生严重的副作用,即改变父文件夹的所有权, root:root这是非常错误的。

multipass exec vm -- bash -c 'ls -ld $HOME'
drwxr-xr-x 3 root root 4096 Jul 15 12:50 /home/ubuntu

创建一个 YAML 文件cloud-init.yaml

#cloud-config
# ^^ this is not a comment above, but a shebang like parser hint, keep it!
write_files:
  # the content here is the verbatim one line full content of your yourssh.pub
  # here a small fresh generated with:
  # ssh-keygen -t ed25519 -C mykey@laptop -f ~/.ssh/yourssh
-   content: |
      ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDsDOXWBOFIEoIctYaXxHAtTtfS3JHAijxHwkOb3IgoW mykey@laptop

    # may you should keep an empty line above ^^
    # the filename sshkey.pub will be created as root:root owner
    path: /tmp/sshkey.pub

# yes, cloud-init has an ssh key management code too :-)
# here a simple append will also do the trick...
runcmd:
  - cat /tmp/sshkey.pub >> /home/ubuntu/.ssh/authorized_keys

然后创建你的虚拟机:

multipass launch -n vm --cloud-init ./cloud-init.yaml

测试一下...并享受自动化的乐趣

相关内容