Merge remote-tracking branch 'matejcik/master'
This commit is contained in:
@@ -123,7 +123,7 @@ Description=trezor-agent SSH agent
|
|||||||
Requires=trezor-ssh-agent.socket
|
Requires=trezor-ssh-agent.socket
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=Simple
|
Type=simple
|
||||||
Environment="DISPLAY=:0"
|
Environment="DISPLAY=:0"
|
||||||
Environment="PATH=/bin:/usr/bin:/usr/local/bin:%h/.local/bin"
|
Environment="PATH=/bin:/usr/bin:/usr/local/bin:%h/.local/bin"
|
||||||
ExecStart=/usr/bin/trezor-agent --foreground --sock-path %t/trezor-agent/S.ssh IDENTITY
|
ExecStart=/usr/bin/trezor-agent --foreground --sock-path %t/trezor-agent/S.ssh IDENTITY
|
||||||
@@ -133,6 +133,14 @@ If you've installed `trezor-agent` locally you may have to change the path in `E
|
|||||||
|
|
||||||
Replace `IDENTITY` with the identity you used when exporting the public key.
|
Replace `IDENTITY` with the identity you used when exporting the public key.
|
||||||
|
|
||||||
|
If you have multiple Trezors connected, you can select which one to use via a `TREZOR_PATH`
|
||||||
|
environment variable. Use `trezorctl list` to find the correct path. Then add it
|
||||||
|
to the agent with the following line:
|
||||||
|
````
|
||||||
|
Environment="TREZOR_PATH=<your path here>"
|
||||||
|
````
|
||||||
|
Note that USB paths depend on the _USB port_ which you use.
|
||||||
|
|
||||||
###### `trezor-ssh-agent.socket`
|
###### `trezor-ssh-agent.socket`
|
||||||
|
|
||||||
````
|
````
|
||||||
|
|||||||
@@ -9,6 +9,6 @@ from keepkeylib.transport_hid import HidTransport
|
|||||||
from keepkeylib.types_pb2 import IdentityType
|
from keepkeylib.types_pb2 import IdentityType
|
||||||
|
|
||||||
|
|
||||||
def enumerate_transports():
|
def find_device():
|
||||||
"""Returns USB HID transports."""
|
"""Returns first USB HID transport."""
|
||||||
return [HidTransport(p) for p in HidTransport.enumerate()]
|
return next(HidTransport(p) for p in HidTransport.enumerate())
|
||||||
|
|||||||
@@ -106,13 +106,13 @@ class Trezor(interface.Device):
|
|||||||
|
|
||||||
def connect(self):
|
def connect(self):
|
||||||
"""Enumerate and connect to the first available interface."""
|
"""Enumerate and connect to the first available interface."""
|
||||||
transports = self._defs.enumerate_transports()
|
transport = self._defs.find_device()
|
||||||
if not transports:
|
if not transport:
|
||||||
raise interface.NotFoundError('{} not connected'.format(self))
|
raise interface.NotFoundError('{} not connected'.format(self))
|
||||||
|
|
||||||
log.debug('transports: %s', transports)
|
log.debug('using transport: %s', transport)
|
||||||
for _ in range(5): # Retry a few times in case of PIN failures
|
for _ in range(5): # Retry a few times in case of PIN failures
|
||||||
connection = self._defs.Client(transport=transports[0],
|
connection = self._defs.Client(transport=transport,
|
||||||
state=self.__class__.cached_state)
|
state=self.__class__.cached_state)
|
||||||
self._override_pin_handler(connection)
|
self._override_pin_handler(connection)
|
||||||
self._override_passphrase_handler(connection)
|
self._override_passphrase_handler(connection)
|
||||||
|
|||||||
@@ -1,13 +1,28 @@
|
|||||||
"""TREZOR-related definitions."""
|
"""TREZOR-related definitions."""
|
||||||
|
|
||||||
# pylint: disable=unused-import,import-error
|
# pylint: disable=unused-import,import-error
|
||||||
|
import os
|
||||||
|
import logging
|
||||||
|
|
||||||
from trezorlib.client import CallException, PinException
|
from trezorlib.client import CallException, PinException
|
||||||
from trezorlib.client import TrezorClient as Client
|
from trezorlib.client import TrezorClient as Client
|
||||||
from trezorlib.messages import IdentityType, PassphraseAck, PinMatrixAck, PassphraseStateAck
|
from trezorlib.messages import IdentityType, PassphraseAck, PinMatrixAck, PassphraseStateAck
|
||||||
from trezorlib.device import TrezorDevice
|
|
||||||
|
try:
|
||||||
|
from trezorlib.transport import get_transport
|
||||||
|
except ImportError:
|
||||||
|
from trezorlib.device import TrezorDevice
|
||||||
|
get_transport = TrezorDevice.find_by_path
|
||||||
|
|
||||||
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
def enumerate_transports():
|
def find_device():
|
||||||
"""Returns all available transports."""
|
"""Selects a transport based on `TREZOR_PATH` environment variable.
|
||||||
return TrezorDevice.enumerate()
|
|
||||||
|
If unset, picks first connected device.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
return get_transport(os.environ.get("TREZOR_PATH"))
|
||||||
|
except Exception as e: # pylint: disable=broad-except
|
||||||
|
log.debug("Failed to find a Trezor device: %s", e)
|
||||||
|
|||||||
Reference in New Issue
Block a user