Partager une clé USB sur le réseau

8

Je recherche une méthode gratuite pour partager un périphérique USB sur le réseau. J'ai un RaspberryPi (raspbian) avec un périphérique USB connecté. Je veux pouvoir recevoir et envoyer des commandes à cet appareil depuis mon serveur Linux.

J'ai essayé remserialmais je n'arrive pas à connecter le client au serveur. j'ai aussi essayé VirtualHeremais ça s'est écrasé

Connaissez-vous une solution gratuite pour le faire?

ÉDITER :

Thx pour ce tutoriel, je l'ai essayé mais j'ai eu quelques problèmes:

pi@raspberrypi /boot $ zcat /proc/config.gz |grep USBIP
CONFIG_USBIP_CORE=m
CONFIG_USBIP_VHCI_HCD=m
CONFIG_USBIP_HOST=m
# CONFIG_USBIP_DEBUG is not set
pi@raspberrypi /boot $ sudo modprobe usbip-core
pi@raspberrypi /boot $ sudo modprobe usbip-host
pi@raspberrypi /boot $ sudo usbipd -D

pi@raspberrypi /boot $ usbip list -l
Local USB devices
=================
- busid 1-1 (0424:9514)
     1-1:1.0 -> hub
- busid 1-1.1 (0424:ec00)
     1-1.1:1.0 -> smsc95xx
- busid 1-1.3 (0403:6010)
     1-1.3:1.0 -> unknown
     1-1.3:1.1 -> unknown
- busid 1-1.4 (04f2:1126)
     1-1.4:1.0 -> usbhid
- busid 1-1.5 (04f2:1125)
     1-1.5:1.0 -> usbhid
     1-1.5:1.1 -> usbhid

pi@raspberrypi /boot $ sudo usbip --debug  bind -b 1-1.3
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/usbip.c:134:[run_command]
running command: `bind'
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/usbip_bind.c:162:[unbind_other]
1-1.3:1.0 -> unknown
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/usbip_bind.c:162:[unbind_other]
1-1.3:1.1 -> unknown
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/utils.c:65:[modify_match_busid]
write "add 1-1.3" to /sys/bus/usb/drivers/usbip-host/match_busid
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/usbip_bind.c:101:[bind_usbip]
bind driver at 1-1.3:1.0 failed
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/usbip_bind.c:101:[bind_usbip]
bind driver at 1-1.3:1.1 failed
usbip: error: could not bind device to usbip-host
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/utils.c:65:[modify_match_busid]
write "del 1-1.3" to /sys/bus/usb/drivers/usbip-host/match_busid
  pi@raspberrypi /boot $ sudo usbip --debug  bind -b 1-1.3:1.1
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/usbip.c:134:[run_command]
  running command: `bind'
usbip: debug: /build/linux-tools-TqR1ks/linux-tools-3.2.17/drivers/staging/usbip/userspace/src/usbip_bind.c:143:[unbind_other]
  problem getting device attributes: No such file or directory
usbip: error: could not unbind driver from device on busid 1-1.3:1.1
pi@raspberrypi /boot $

Qu'est ce que ça pourrait être ?

PyNico
la source

Réponses:

3

vous pouvez utiliser cette clé USB du logiciel et voici comment configurer le logiciel et l'utiliser à la fois côté serveur et côté client

Remarques:

  1. Dans ce tutoriel , utilisez le server server1.example.com with IP 192.168.0.100et client client1.example.com with IP 192.168.0.101, à la fois en cours d' exécution Ubuntu Ces paramètres peuvent varier pour vous, donc vous devez les remplacer le cas échéant.

  2. De plus, le compte utilisé dans ce didacticiel est le rootsi une commande ne fonctionne pas, utilisez la rootou utilisez sudoavant la commande

Installation et utilisation d'USB / IP sur le serveur

Nous pouvons installer usbip comme suit:

apt-get install usbip

Ensuite, nous chargeons les modules du noyau usbip:

modprobe usbip

modprobe usbip_common_mod

Pour vérifier s'ils ont vraiment été chargés, exécutez:

lsmod | grep usbip

La sortie doit être similaire à celle-ci:

root@server1:~# lsmod | grep usbip
usbip                  15124  0
usbip_common_mod       13605  1 usbip
root@server1:~#

Pour vous assurer que les deux modules sont chargés automatiquement à chaque démarrage du système, vous pouvez les ajouter à / etc / modules:

vi /etc/modules

[...]
usbip
usbip_common_mod

Maintenant, nous pouvons démarrer le démon usbip:

root@server1:~# usbipd -D
Bind usbip.ko to a usb device to be exportable!

Maintenant, connectez un périphérique USB que vous souhaitez exporter vers le serveur - j'utilise ici une clé USB SanDisk.

Exécutez la commande lsusb

pour trouver l'ID de fournisseur / périphérique correspondant qui se présente sous la forme de:

Bus XXX Device YYY: ID VendorID:DeviceID

La sortie sur mon serveur est la suivante:

root@server1:~# lsusb
Bus 001 Device 002: ID 0781:5151 SanDisk Corp. Cruzer Micro Flash Drive
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

L'ID de fournisseur / périphérique de ma clé USB SanDisk est 0781: 5151.

Maintenant, lancez

usbip_bind_driver --list
root@server1:~# usbip_bind_driver --list
List USB devices
 - busid 1-1 (0781:5151)
     1-1:1.0 -> usb-storage

Comme vous le voyez, l'ID de fournisseur / périphérique de ma clé USB SanDisk (0781: 5151) correspond au BUSID 1-1. Nous en avons besoin BUSIDpour connecter le périphérique USB au serveur:

root@server1:~# usbip_bind_driver --usbip 1-1
** (process:765): DEBUG:  1-1:1.0       -> usb-storage
** (process:765): DEBUG: unbinding interface
** (process:765): DEBUG: write "add 1-1" to /sys/bus/usb/drivers/usbip/match_busid
** Message: bind 1-1 to usbip, complete!

Voilà, nous pouvons maintenant utiliser la clé USB SanDisk sur un client USB distant.

BTW, si vous exécutez ...

netstat -tap

... vous devriez voir que le démon usbip écoute port 3240

assurez-vous donc que ce port n'est pas bloqué par votre pare-feu:

root@server1:~# netstat -tap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 *:ssh                   *:*                     LISTEN      537/sshd
tcp        0      0 *:3240                  *:*                     LISTEN      762/usbipd
tcp        0     52 server1.example.com:ssh 192.168.0.199:4024      ESTABLISHED 667/0
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      537/sshd

Installer et utiliser USB / IP sur le client

Nous devons également installer usbip sur le client:

sudo apt-get install usbip

Ensuite, nous chargeons le vhci-hcdmodule du noyau:

modprobe vhci-hcd

Pour vérifier s'il a vraiment été chargé, exécutez:

root@client1:~# lsmod | grep vhci_hcd
vhci_hcd               19800  0
usbip_common_mod       13605  1 vhci_hcd

Pour vous assurer que le module est chargé automatiquement à chaque démarrage du système, vous pouvez l'ajouter à /etc/modules:

vi /etc/modules

[...]
vhci-hcd

Connectez-vous maintenant au serveur USB et obtenez une liste des périphériques USB disponibles:

    usbip -l 192.168.0.100
(192.168.0.100 is the IP address of the usbip server.)

Vous devriez trouver la clé USB SanDisk dans la sortie (BUSID 1-1):

root@client1:~# usbip -l 192.168.0.100
- 192.168.0.100
     1-1: SanDisk Corp. : Cruzer Micro Flash Drive (0781:5151)
        : /sys/devices/pci0000:00/0000:00:07.2/usb1/1-1
        : (Defined at Interface level) (00/00/00)
        :  0 - Mass Storage / SCSI / Bulk (Zip) (08/06/50)

Pour attacher ce périphérique au client, exécutez:

root@client1:~# usbip -a 192.168.0.100 1-1
8 ports available
port 0 attached

Maintenant, exécutez lsusbet vous devriez trouver le périphérique USB distant dans la sortie sur le client:

root@client1:~# lsusb
Bus 001 Device 002: ID 0781:5151 SanDisk Corp. Cruzer Micro 256/512MB Flash Drive
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Vous pouvez maintenant utiliser le périphérique USB distant comme s'il s'agissait d'un périphérique USB local (par exemple, montez-le, formatez-le, écrivez-le, lisez-le, etc.).

Détacher un périphérique USB distant

Un périphérique USB distant peut être détaché comme suit:

client1:

Courir...

usbip --port

... pour connaître le port que le périphérique USB distant utilise sur le client - dans ce cas, c'est le port 00:

root@client1:~# usbip --port
8 ports available

Port 00: <Port in Use> at High Speed(480Mbps)
       SanDisk Corp. : Cruzer Micro 256/512MB Flash Drive (0781:5151)
       1-1 -> usbip://192.168.0.100:3240/1-1  (remote devid 00010002 (bus/dev 001/002))
       1-1:1.0 used by usb-storage
           /sys/class/bsg/1:0:0:0/device
           /sys/class/scsi_device/1:0:0:0/device
           /sys/class/scsi_disk/1:0:0:0/device
           /sys/class/scsi_host/host1/device
           /sys/class/usb_endpoint/usbdev1.4_ep02/device
           /sys/class/usb_endpoint/usbdev1.4_ep81/device
           /sys/block/sdb/device
Port 01: <Port Available>
Port 02: <Port Available>
Port 03: <Port Available>
Port 04: <Port Available>
Port 05: <Port Available>
Port 06: <Port Available>
Port 07: <Port Available>

Nous avons besoin du numéro de port pour détacher l'appareil:

usbip -d 00

root@client1:~# usbip -d 00
8 ports available

port 0 detached

Sur le serveur, nous utilisons le BUSID (1-1)pour lier le périphérique USB au système local (le commutateur --other lie le périphérique au système local afin qu'il ne soit plus disponible sur le réseau):

serveur1:

usbip_bind_driver --other 1-1

root@server1:~# usbip_bind_driver --other 1-1
** (process:7333): DEBUG: write "del 1-1" to /sys/bus/usb/drivers/usbip/match_busid
** Message: bind 1-1 to other drivers than usbip, complete!

Revenez maintenant au client et vérifiez si le périphérique USB distant est toujours disponible:

client1:

Si tout se passe bien, cela ne devrait plus être répertorié:

root@client1:~# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub 

Liens

http://usbip.sourceforge.net

Source du tutoriel (côté serveur)

Source du tutoriel (côté client)

Fat Mind
la source
Remarque pour les utilisateurs d'Ubuntu Trusty (14.04): vous aurez besoin d'un noyau rétroporté d'Utopic ou plus récent et jouez avec les binaires. Voir pour plus d'informations bugs.launchpad.net/ubuntu/+source/usbip/+bug/898003 . Toute ancienne version d'Ubuntu prise en charge était malheureusement imparfaite de bugs et livrée avec une usbip non fonctionnelle.
gertvdijk
Vérifiez cette réponse avant utilisation: askubuntu.com/a/647071/187689
iman