运行带监视器的 QEMU/KVM:kvm ...some_parameters... -monitor unix:/my_path/my_fifo,server,nowait
然后我们可以使用socat - UNIX-CONNECT:/my_path/my_fifo
输入命令进行连接。
简单又方便。
我想将监视器接口暴露给本地网络(根据安全方法,可能使用 socat),这相当安全。我该如何保护对监视器的访问?
我没有看到任何可用的密码选项、证书等。所以我怀疑我必须依赖 QEMU/KVM 外部的方法。
答案1
您可以使用 SSH 安全地访问此类套接字,并利用 SSH 提供的安全选项。您socat
根本不需要,因为 SSH 允许通过以下选项转发套接字到套接字或 TCP 到套接字-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 客户端将仅在本地主机上侦听)。
为了实现更好的安全性,请使用 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 转发的监视套接字。