Данная инструкция позволяет пробросить USB-токен с физического хоста на на удалённый хост, в том числе и виртуальны
Установка и запуск
Базовая настройка (на всех хостах)
- Установить пакеты
Bash
sudo apt install linux-modules-extra-`uname -r` linux-tools-`uname -r` hwdata
- Добавить в файл
/etc/modules-load.d/modules.conf
строки:
/etc/modules-load.d/modules.conf
vhci_hcd usbip_core usbip_host
- Перезагрузить систему
- Создать файл запуска сервиса
/etc/systemd/system/usbipd.service
, со следующим содержимым:
/etc/systemd/system/usbipd.service
[Unit] Description=USBIPd After=network.target [Service] ExecStart=/bin/sh /root/script/usbipd Type=oneshot RemainAfterExit=yes [Install] WantedBy=multi-user.target
- Включить и запустить сервис:
Bash
systemctl enable usbipd.service systemctl start usbipd.service
Настройка отдающей стороны
- Подключить USB-токен к системе и убедиться что он доступен
- Просмотр доступных для раздачи локальных устройств:
Bash
usbip list -l
Вывод должен быть примерно таким:
usbip list -l
- busid 1-5 (0c45:6370) Microdia : unknown product (0c45:6370)Данная инструкция позволяет пробросить USB-токен с физического хоста на на удалённый хост, в том числе и виртуальны Установка и запуск Базовая настройка (на всех хостах) Установить пакеты sudo apt install linux-modules-extra-`uname -r` linux-tools-`uname -r` hwdata Добавить в файл /etc/modules-load.d/modules.conf строки: vhci_hcd usbip_core usbip_host Перезагрузить систему Создать файл запуска сервиса /etc/systemd/system/usbipd.service, со следующим содержимым: [Unit] Description=USB/IP server After=network.target [Service] ExecStart=/usr/bin/usbipd [Install] WantedBy=multi-user.target Включить и запустить сервис: systemctl enable usbipd.service systemctl start usbipd.service Настройка отдающей стороны Подключить USB-токен к системе и убедиться что он доступен Просмотр доступных для раздачи локальных устройств: usbip list -l Вывод должен быть примерно таким: - busid 1-5 (0c45:6370) Microdia : unknown product (0c45:6370) - busid 1-6.1 (9710:7840) MosChip Semiconductor : MCS7820/MCS7840 2/4 port serial adapter (9710:7840) - busid 1-6.2 (9710:7840) MosChip Semiconductor : MCS7820/MCS7840 2/4 port serial adapter (9710:7840) - busid 1-8 (046d:c31c) Logitech, Inc. : Keyboard K120 (046d:c31c) - busid 1-9.4 (0a89:0030) Aktiv : Rutoken ECP (0a89:0030) Подключение устройства к раздаче: usbip bind -b [busid] Отключение от раздачи: usbip unbind -b [busid] Настройка принимающей стороны (сервер ELM Offline) Просмотр доступных для подключения удаленных устройств: usbip list -r [remote_IP] Подключение устройства: usbip attach -r [remote_IP] -b [busid] Просмотр подключенных устройств: usbip port[busid] Если есть подключенные устройства, то вывод должен быть примерно таким: Imported USB devices ==================== libusbip: error: fopen libusbip: error: read_record Port 00: <Port in Use> at Full Speed(12Mbps) Aktiv : Rutoken ECP (0a89:0030) 2-1 -> unknown host, remote port and remote busid -> remote bus/dev 001/003 Так же, при успешном подключении устройства, оно должно появиться в списке lsusb. Например, так: Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 002 Device 002: ID 0a89:0030 Aktiv Rutoken ECP Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 015 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 014 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 013 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 012 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 011 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 010 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 009 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 008 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 007 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 006 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 005 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 002: ID 0627:0001 Adomax Technology Co., Ltd QEMU USB Tablet Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Отключение устройства: usbip detach -p [port_number] Автоматизация запуска Автоматизация отдающей стороны Создаем скрипт автообновления инструментов и расшаривания устройства usbipd /scripts/usbipd #!/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin bindID='1-1' # BusID нашего USB-устройства на сервере kernel_version=$(uname -r) - # создание переменной, содержащей текущую версию ядра системы apt install linux-tools-$kernel_version # установка инструментов проброса для актуальной версии ядра usbipd -D sleep 1 usbip bind -b $bindID # делаем USB-устройство на сервере доступным для проброса usbip attach --remote=localhost --busid=$bindID sleep 3 usbip detach --port=00 Выдаем разрешение на запуск скрипта: chmod ugo+x usbipd Обновляем конфигурацию systemd и добавляем юнит в автозапуск: systemctl daemon-reload systemctl enable usbipd Автоматизация принимающей стороны Создаем скрипт подключения /root/script/usbip_client #!/bin/sh apt-get install linux-tools-`uname -r` -y sleep 1 usbip attach --remote=[remote_IP] --busid=[busid] sleep 1 echo "Подключенные устройства:" usbip port Даем разрешение на запуск скрипта: chmod ugo+x usbip_client Cоздаем новый юнит для запуска автоматического подключения USB-устройства /etc/systemd/system/usbip_client.service [Unit] Description=usbip_client After=network.target [Service] ExecStart=/bin/sh /root/script/usbip_client Type=oneshot RemainAfterExit=yes [Install] WantedBy=multi-user.target Обновляем конфигурацию systemd и добавляем юнит в автозапуск: systemctl daemon-reload systemctl enable usbip_client - busid 1-6.1 (9710:7840) MosChip Semiconductor : MCS7820/MCS7840 2/4 port serial adapter (9710:7840) - busid 1-6.2 (9710:7840) MosChip Semiconductor : MCS7820/MCS7840 2/4 port serial adapter (9710:7840) - busid 1-8 (046d:c31c) Logitech, Inc. : Keyboard K120 (046d:c31c) - busid 1-9.4 (0a89:0030) Aktiv : Rutoken ECP (0a89:0030)
- Подключение устройства к раздаче:
Bash
usbip bind -b [busid]
- Отключение от раздачи:
Bash
usbip unbind -b [busid]
Настройка принимающей стороны (сервер ELM Offline)
- Просмотр доступных для подключения удаленных устройств:
Bash
usbip list -r [remote_IP]
- Подключение устройства:
Bash
usbip attach -r [remote_IP] -b [busid]
- Просмотр подключенных устройств:
Bash
usbip port[busid]
Если есть подключенные устройства, то вывод должен быть примерно таким:
usbip port
Imported USB devices ==================== libusbip: error: fopen libusbip: error: read_record Port 00: <Port in Use> at Full Speed(12Mbps) Aktiv : Rutoken ECP (0a89:0030) 2-1 -> unknown host, remote port and remote busid -> remote bus/dev 001/003
Так же, при успешном подключении устройства, оно должно появиться в списке lsusb
. Например, так:
lsusb
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 002 Device 002: ID 0a89:0030 Aktiv Rutoken ECP Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 015 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 014 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 013 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 012 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 011 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 010 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 009 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 008 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 007 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 006 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 005 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 002: ID 0627:0001 Adomax Technology Co., Ltd QEMU USB Tablet Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
- Отключение устройства:
Bash
usbip detach -p [port_number]
Автоматизация запуска
Автоматизация отдающей стороны
- Создаем скрипт автообновления инструментов и расшаривания устройства usbipd
/scripts/usbipd
/scripts/usbipd
#!/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin bindID='1-1' # BusID нашего USB-устройства на сервере kernel_version=$(uname -r) - # создание переменной, содержащей текущую версию ядра системы apt install linux-tools-$kernel_version # установка инструментов проброса для актуальной версии ядра usbipd -D sleep 1 usbip bind -b $bindID # делаем USB-устройство на сервере доступным для проброса usbip attach --remote=localhost --busid=$bindID sleep 3 usbip detach --port=00
Выдаем разрешение на запуск скрипта:
Bash
chmod ugo+x usbipd
- Обновляем конфигурацию systemd и добавляем юнит в автозапуск:
Bash
systemctl daemon-reload systemctl enable usbipd
Автоматизация принимающей стороны
- Создаем скрипт подключения
/root/script/usbip_client
/root/script/usbip_client
#!/bin/sh apt-get install linux-tools-`uname -r` -y sleep 1 usbip attach --remote=[remote_IP] --busid=[busid] sleep 1 echo "Подключенные устройства:" usbip port
- Даем разрешение на запуск скрипта:
Bash
chmod ugo+x usbip_client
- Cоздаем новый юнит для запуска автоматического подключения USB-устройства
/etc/systemd/system/usbip_client.service
/etc/systemd/system/usbip_client.service
[Unit] Description=usbip_client After=network.target [Service] ExecStart=/bin/sh /root/script/usbip_client Type=oneshot RemainAfterExit=yes [Install] WantedBy=multi-user.target
- Обновляем конфигурацию systemd и добавляем юнит в автозапуск:
Bash
systemctl daemon-reload systemctl enable usbip_client