Executando QEMU/KVM com monitor:kvm ...some_parameters... -monitor unix:/my_path/my_fifo,server,nowait
Podemos então conectar usando socat - UNIX-CONNECT:/my_path/my_fifo
comandos de digitação.
Fácil e prático.
Gostaria de expor a interface do monitor à rede local (provavelmente usando socat, de acordo com o método de segurança), que é razoavelmente seguro. Como posso proteger o acesso ao monitor?
Não vejo nenhuma opção de senha, certificado, etc. disponível. Portanto, suspeito que devo confiar em um método externo ao QEMU/KVM.
Responder1
Você pode usar o SSH para acessar esse soquete com segurança, aproveitando as opções de segurança fornecidas pelo SSH. Você não precisa socat
de nada, porque o SSH permite o encaminhamento de soquete para soquete ou tcp para soquete através -L
da opção:
-L [bind_address:]port:host:hostport
-L [bind_address:]port:remote_socket
-L local_socket:host:hostport
-L local_socket:remote_socket
Por exemplo, se o seu qemu
processo for executado com -monitor unix:/my_path/my_fifo,server,nowait
a opção, use ssh virtualization-host -L /tmp/monitor:/my_path/my_fifo
para conectar e, em seguida, conecte-se ao soquete local /tmp/monitor
ou use ssh virtualization-host -L 12345:/my_path/my_fifo
e telnet para localhost:12345
(o cliente SSH escutará apenas no localhost neste caso).
Para obter melhor segurança, use chaves SSH para conectar-se aos monitores. No host de virtualização remota, crie um usuário que terá rw
direitos sobre o /my_path/my_fifo
objeto. Crie um par de chaves e coloque a chave pública no arquivo desse usuário ~/.ssh/authorized_keys
de forma restrita para permitir apenas o encaminhamento:
restrict,port-forwarding,command="/bin/false" ssh-... ..... (the public key string)
Para conectar, use um comando que não aloque um shell e não execute um comando, útil apenas para encaminhamentos:
ssh monitoruser@virtualization-host -i mointor_private_key -L 12345:/my_path/my_fifo -N
e por fim, use telnet localhost 12345
para acessar o soquete do monitor encaminhado via SSH.