Merge remote-tracking branch 'matejcik/master'

This commit is contained in:
Roman Zeyde
2018-08-02 21:51:01 +03:00
4 changed files with 35 additions and 12 deletions

View File

@@ -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`
```` ````

View File

@@ -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())

View File

@@ -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)

View File

@@ -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)