Запуск 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 будет прослушивать только localhost).
Для достижения лучшей безопасности используйте ключи SSH для подключения к мониторам. На удаленном хосте виртуализации создайте пользователя, который будет иметь rw
права на /my_path/my_fifo
объект. Создайте пару ключей и поместите открытый ключ в файл этого пользователя ~/.ssh/authorized_keys
ограниченным способом, чтобы разрешить только пересылку:
restrict,port-forwarding,command="/bin/false" ssh-... ..... (the public key string)
Для подключения используйте команду, которая не выделяет оболочку и не запускает команду, полезно только для переадресации:
ssh monitoruser@virtualization-host -i mointor_private_key -L 12345:/my_path/my_fifo -N
и, наконец, используйте telnet localhost 12345
для доступа к сокету монитора, перенаправленному через SSH.