我使用 Packer 启动 QEMU 上预安装的 Debian Buster 映像来配置它进行部署,但每当 Packer 启动该映像时,它都无法通过 SSH 连接。
Debian 映像是默认的 cd install 完全更新并已openssh-server
安装并PermitRootLogin
设置为yes
. Packer 将启动映像并尝试通过 SSH 连接,但 SSH 服务器在我连接到 VNC 之前不会启动。
这是正在运行的 QEMU 命令:
/usr/bin/qemu-system-x86_64 -name packer-qemu -machine type=pc,accel=tcg -netdev user,id=user.0,hostfwd=tcp::3841-:22 -device virtio-net,netdev=user.0 -drive file=image/packer-qemu,if=virtio,cache=writeback,discard=ignore,format=qcow2 -boot c -m 1024 -vnc 127.0.0.1:0
我已经用多台机器和多个版本的 QEMU 确认了这个问题。
我可以在没有 Packer 的情况下重现该问题,只需自己运行 QEMU 命令即可。
查看systemd-analyze
,它ssh.service
会一直挂起,直到 VNC 连接为止。
如果我将 ssh 服务器置于调试模式,我会得到一个缺少权限分离目录:/run/sshd错误。如果 VNC 连接且 SSH 服务器未处于调试状态,则该目录存在。
我的预感是 QEMU 没有创建控制台端口或类似的东西,但我不知道如何修复它。
这是我的打包文件:
{
"builders": [
{
"type": "qemu",
"iso_url": "file:/home/user/buster.img",
"iso_checksum_type": "none",
"disk_image": "true",
"vm_name": "base.raw",
"headless": "true",
"cpus": "1",
"memory": "1024",
"boot_wait": "2m",
"shutdown_command": "systemctl poweroff",
"ssh_timeout": "2m",
"ssh_username": "root",
"ssh_password": "password",
"output_directory": "image"
}
]
}