QEMU/KVM mit Monitor ausführen:kvm ...some_parameters... -monitor unix:/my_path/my_fifo,server,nowait
Wir können dann eine Verbindung herstellen, indem socat - UNIX-CONNECT:/my_path/my_fifo
wir die Befehle eingeben.
Einfach und praktisch.
Ich möchte die Monitorschnittstelle dem lokalen Netzwerk zugänglich machen (wahrscheinlich mit Socat, je nach Sicherungsmethode), was einigermaßen sicher ist. Wie kann ich den Zugriff auf den Monitor schützen?
Ich sehe keine verfügbare Kennwortoption, kein Zertifikat usw. Ich vermute also, dass ich mich auf eine Methode außerhalb von QEMU/KVM verlassen muss.
Antwort1
Sie können SSH verwenden, um sicher auf einen solchen Socket zuzugreifen, und dabei die von SSH bereitgestellten Sicherheitsoptionen nutzen. Sie brauchen das socat
überhaupt nicht, da SSH die Weiterleitung von Socket zu Socket oder von TCP zu Socket über -L
die Option ermöglicht:
-L [bind_address:]port:host:hostport
-L [bind_address:]port:remote_socket
-L local_socket:host:hostport
-L local_socket:remote_socket
Wenn Ihr qemu
Prozess beispielsweise mit -monitor unix:/my_path/my_fifo,server,nowait
der Option ausgeführt wird, verwenden Sie ssh virtualization-host -L /tmp/monitor:/my_path/my_fifo
zum Herstellen einer Verbindung und dann zum lokalen Socket /tmp/monitor
, oder verwenden Sie ssh virtualization-host -L 12345:/my_path/my_fifo
und Telnet zu localhost:12345
(der SSH-Client hört in diesem Fall nur auf dem lokalen Host).
Um eine bessere Sicherheit zu erreichen, verwenden Sie SSH-Schlüssel, um eine Verbindung zu Monitoren herzustellen. Erstellen Sie auf dem Remote-Virtualisierungshost einen Benutzer, der rw
Rechte für das Objekt hat. Erstellen Sie ein Schlüsselpaar und legen Sie den öffentlichen Schlüssel so eingeschränkt /my_path/my_fifo
in die Datei dieses Benutzers ein, dass nur die Weiterleitung zulässig ist:~/.ssh/authorized_keys
restrict,port-forwarding,command="/bin/false" ssh-... ..... (the public key string)
Verwenden Sie zum Verbinden einen Befehl, der keine Shell zuweist und keinen Befehl ausführt. Dies ist nur für Weiterleitungen nützlich:
ssh monitoruser@virtualization-host -i mointor_private_key -L 12345:/my_path/my_fifo -N
und verwenden Sie schließlich, telnet localhost 12345
um auf den per SSH weitergeleiteten Monitor-Socket zuzugreifen.