QEMU/KVM:如何保護監視器訪問?
使用監視器執行 QEMU/KVM:
kvm ...some_parameters... -monitor unix:/my_path/my_fifo,server,nowait
然後我們可以使用
socat - UNIX-CONNECT:/my_path/my_fifo
然後鍵入命令進行連接。簡單方便。
我想將監視器介面暴露給本地網路(根據安全方法,可能使用 socat),這是相當安全的。如何保護對顯示器的訪問?
我沒有看到任何可用的密碼選項、證書等。所以我懷疑我必須依賴 QEMU/KVM 外部的方法。
您可以利用 SSH 提供的安全選項,使用 SSH 安全地訪問此類套接字。您根本不需要
socat
,因為 SSH 允許通過選項轉發 socket-to-socket 或 tcp-to-socket-L
:-L [bind_address:]port:host:hostport -L [bind_address:]port:remote_socket -L local_socket:host:hostport -L local_socket:remote_socket
例如,如果您的
qemu
程序使用-monitor unix:/my_path/my_fifo,server,nowait
選項執行,請使用ssh virtualization-host -L /tmp/monitor:/my_path/my_fifo
連接,然後連接到本地套接字/tmp/monitor
,或者使用ssh virtualization-host -L 12345:/my_path/my_fifo
和 telnet 到localhost:12345
(在這種情況下,SSH 客戶端將僅在 localhost 上偵聽)。為了獲得更好的安全性,請使用 SSH 密鑰連接到監視器。在遠端虛擬化主機上,創建一個擁有對象
rw
權限的使用者/my_path/my_fifo
。創建一個密鑰對並以受限方式將公鑰放入該使用者的~/.ssh/authorized_keys
文件中,以僅允許轉發:restrict,port-forwarding,command="/bin/false" ssh-... ..... (the public key string)
要連接,請使用不分配 shell 且不執行命令的命令,僅對轉發有用:
ssh monitoruser@virtualization-host -i mointor_private_key -L 12345:/my_path/my_fifo -N
最後,用於
telnet localhost 12345
訪問通過 SSH 轉發的監控套接字。