Данная инструкция позволяет пробросить 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


  • Нет меток