В процессе работы иногда хочется пробросить токен на виртуальную машину. Чтобы это сделать, необходимо две вещи:
- Узнать адрес смарт-карты на usb шине
- Отключить pcscd на хосте (Почему это нужно, можно посмотреть здесь)
Чтобы узнать адрес токена, введем команду:
Узнаем адрес токена на USB шине
$ lsusb -t /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 5000M /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/12p, 480M |__ Port 1: Dev 2, If 1, Class=Chip/SmartCard, Driver=, 480M |__ Port 1: Dev 2, If 0, Class=Mass Storage, Driver=usb-storage, 480M |__ Port 2: Dev 29, If 0, Class=Vendor Specific Class, Driver=r8152, 480M |__ Port 5: Dev 4, If 0, Class=Video, Driver=uvcvideo, 480M |__ Port 5: Dev 4, If 1, Class=Video, Driver=uvcvideo, 480M |__ Port 8: Dev 5, If 1, Class=Wireless, Driver=btusb, 12M |__ Port 8: Dev 5, If 0, Class=Wireless, Driver=btusb, 12M
Устройство, имеющее класс Chip/SmartCard и есть токен. В нашем случае оно находится на первой шине и первом порту.
Перейдем к запуску:
Проброс токена в qemu
# Отключаем сервис pcscd sudo systemctl stop pcscd pcscd.socket # Указываем путь до ядра # Указываем путь до initramfs образа # Указываем Размер оперативной памяти виртуальной машины в мегабайтах # Включаем KVM # Добавляем эмуляцию usb контроллера # Указываем протокол работы контроллера (ehci. Для xhci передаем "-device qemu-xhci") # Указываем путь до пробрасываемемого устройства sudo qemu-system-x86_64 -kernel /boot/vmlinuz-$(uname -r) \ -initrd /boot/initrd.img-$(uname -r) \ -m 1024 \ -cpu host \ -enable-kvm \ -usb \ -device usb-ehci,id=ehci \ -device usb-host,hostbus=1,hostport=1