Networking

如何使用 QEMU 從主機 SSH 到訪客?

  • March 27, 2022

如何使用 qemu 設置從主機到來賓的 ssh?我可以在沒有任何特殊參數的情況下啟動 VM 時使用埠重定向,如下所示:

/usr/bin/qemu-system-x86_64 -hda ubuntu1204 -m 512 -redir tcp:7777::8001

但是當我嘗試使用以下啟動時:

/usr/bin/qemu-system-x86_64 \
-m 1024 \
-name vserialtest \
-hda ubuntu1204 \
-chardev socket,host=localhost,port=7777,server,nowait,id=port1-char \
-device virtio-serial \
-device virtserialport,id=port1,chardev=port1-char,name=org.fedoraproject.port.0 \
-net user,hostfwd=tcp:7777::8001

我收到以下錯誤,VM 無法啟動:

qemu-system-x86_64: -net user,hostfwd=tcp:7777::8001: invalid host
forwarding rule 'tcp:7777::8001'
qemu-system-x86_64: -net user,hostfwd=tcp:7777::8001: Device 'user'
could not be initialized

請注意,我可以在沒有-net參數的情況下啟動虛擬機而沒有任何問題,但是,我想設置從主機到來賓的 ssh。從客人到主機的 ssh 按預期工作正常。

編輯

我試過使用

-net user,hostfwd=tcp::7777-:8001

-net user,hostfwd=tcp::7777:8001

但錯誤仍然存在,VM 無法啟動。

我認為錯誤不是來自-net語句,而是來自:

-chardev socket,host=localhost,port=7777,server,nowait,id=port1-char

該語句已經使用了 port 7777。對於埠轉發,使用

-net user,hostfwd=tcp::7777-:8001

不設置 virtio 串列通道時它工作正常。

如果我理解正確,您想設置一個 virtio 串列通道以使用 Unix 域套接字從主機到 VM 通信?

在這種情況下,以下可以完成這項工作:

/usr/bin/qemu-system-x86_64 \
-m 1024 \
-name vserialtest \
-hda ubuntu1204 \
-chardev socket,path=/tmp/port1,server,nowait,id=port1-char \
-device virtio-serial \
-device virtserialport,id=port1,chardev=port1-char,name=org.fedoraproject.port.0 \
-net user,hostfwd=tcp::7777-:8001

如何使用 ssh 從主機連接到 VM 的範例:

-net user,hostfwd=tcp::10022-:22
-net nic

此主機轉發將 localhost(主機)埠 10022 映射到 VM 上的埠 22。像這樣啟動 VM 後,您可以從 localhost 訪問它,如下所示:

ssh vmuser@localhost -p10022

-net nic 命令初始化一個非常基本的虛擬網路介面卡。

引用自:https://unix.stackexchange.com/questions/124681