Разрешить пользователю настраивать SSH-туннель, но ничего больше

Вы сделали вещи слишком сложными. Декоратор может быть просто удален с помощью del self._greedy_function. Нет необходимости в атрибуте __wrapped__.

Вот минимальная реализация методов set_cache и unset_cache:

class LRU(OrderedDict):
    def __init__(self, maxsize=128, *args, **kwargs):
        # ...
        self._cache = dict()
        super().__init__(*args, **kwargs)

    def _greedy_function(self):
        time.sleep(1)
        return time.time()

    def set_cache(self):
        self._greedy_function = lru_cache(self._cache)(getattr(self, "_greedy_function"))

    def unset_cache(self):
        del self._greedy_function

Используя ваш декоратор lru_cache, вот результаты

o = LRU()
o.set_cache()
print('First call', o._greedy_function())
print('Second call',o._greedy_function()) # Here it prints out the cached value
o.unset_cache()
print('Third call', o._greedy_function()) # The cache is not used

Выходы [ 1111]

First call 1552966668.735025
Second call 1552966668.735025
Third call 1552966669.7354007
93
задан Lorin Hochstein 2 January 2011 в 22:56
поделиться

4 ответа

Вы, вероятно, захотите установить оболочку пользователя на ограниченная оболочка . Сбросьте переменную ПУТИ в ~ пользователя/.bashrc или ~/.bash_profile, и они не будут в состоянии выполнить любые команды. Позже, если Вы решаете, что хотите позволить пользователю (пользователям) выполнять ограниченный набор команд, как less или tail, например, тогда можно скопировать позволенные команды в отдельный каталог (такой как /home/restricted-commands) и обновить ПУТЬ для указания на тот каталог.

18
ответ дан Jason Day 24 November 2019 в 06:20
поделиться

я в состоянии настроить authorized_keys файл с открытым ключом для входа в систему. То, в чем я не уверен, является дополнительной информацией, я должен ограничить то, что той учетной записи позволяют сделать. Например, я знаю, что могу поместить команды, такие как:

no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding

Вы хотели бы строку в своем authorized_keys файле, который похож на это.

permitopen="host.domain.tld:443",no-pty,no-agent-forwarding,no-X11-forwardi
ng,command="/bin/noshell.sh" ssh-rsa AAAAB3NzaC.......wCUw== zoredache 
3
ответ дан gdelfino 24 November 2019 в 06:20
поделиться

См. это сообщение при аутентификации открытых ключей .

Эти два главного, которое необходимо помнить:

  1. Удостоверяются, что Вы chmod 700 ~/.ssh
  2. Добавляете блок с открытым ключом к авторизованным ключам
-1
ответ дан Nathaniel Ford 24 November 2019 в 06:20
поделиться

Вы генерируете ключ на пользовательской машине через любой ssh клиент, который они используют. ШПАКЛЕВКА, например, имеет утилиту, чтобы сделать эту точную вещь. Это генерирует и и открытый ключ с закрытым ключом.

содержание сгенерированного файла с открытым ключом будет помещено в authorized_keys файл.

Следующий необходимо удостовериться, что ssh клиент настроен для использования закрытого ключа, который генерировал открытый ключ. Это является довольно прямым, но немного отличается в зависимости от используемого клиента.

-3
ответ дан palehorse 24 November 2019 в 06:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: