Pull to refresh
4
0
Send message

Если вероятность пападания в такую ситуацию выше нуля, то разоритесь на аппаратный usb-ключ. Ну или оставьте парольную аутентификацию для такого случая.

У меня были сомнения насчет keyboard-interactive, но сейчас проверил: все равно пароль одним пакетом посылается.

А может сделать проще? Вход на сервер по ключу и NOPASSWD в sudoers...

Этот да. Но в отличие от пароля для аутентификации, который всегда передается в начале сессии (но одним сообщением), интерактивный пароль на su или sudo может передаваться (а может и не передаваться, если пользователю не надо ничего запускать от рута) где-то в середине и его надо будет еще отличить от обычного набора команд.

Клиент передает ssh пароль на сервер в одном сообщении, а не посимвольно, так что никакого "мусора" для равномерности там не требуется.

https://datatracker.ietf.org/doc/html/rfc4252#section-8

Кстати, если внимательно посмотреть слад, то там вообще речь не о пароле, который используется для аутентификации на сервере, а о пароле, который пользователь будет вводить, если вдруг захочет стать суперпользователем через su

Слайды про утечку пользователя по паролю при наборе его используя SSH (не совсем в тему, но идея похожая)

а с чего это вы взяли, что ssh передает пароль интерактивно буква за буквой в отдельных пакетах?

Зато много красивых слов "блокчейн", "электронная подпись", "невозможно подделать" создают иллюзию надежности и невозможности фальсификаций...

Параметры подключения к БД используются также в конфигах других сервисов. Выносим их в отдельный файл mysql-creds.yml

Теперь подключаем в основном конфиге через якорь *

Спецификация yaml не поддерживает включения из других файлов

Придерживайтесь best practices

Всегда заключайте строковые значения в кавычки. 

Что-то ни одного строкового значения в кавычках в примерах в тексте статьи не заметно.

А не проще ли поднять сервер локально, nginx у провайдера, и связать их через ssh туннель?

Вы еще спросите почему только асинхронные итераторы повышают навык кодирования...

"Если к Вам не прижимаются в метро, то это вовсе не означает, что метро в Париже не существует."

numbers = MyRange(1, 5)
iterator = iter(numbers)  # Получаем итератор
print(next(iterator))  # Выведет: 1
print(next(iterator))  # Выведет: 2
print(next(iterator))  # Выведет: 3
print(next(iterator))  # Выведет: 4
print(next(iterator))  # Выведет: StopIteration исключение

iterator = iter(numbers)  # Пытаемся получить новый итератор
print(next(iterator))  # Надеемся, что он выдаст 1, но получаем StopIteration исключение
# WTF?! Нам подсунули использованный итератор!!

Очередное сравнение красного с круглым

С какой целью вам определять класс в type_animal, если подкласс Cat или Dog уже его определяет? Для чего вам нужно это дублирование?

Или:

cat = Cat(name="Барсик")

Или:

cat = Animal(name="Барсик", type_animal=TypeAnimal.CAT)

Но зачем мешать эти два примера в одном?

Тогда надо писать:

cat = Cat(name="Барсик", type_animal=TypeAnimal.REPTILIA)

Sound это свойство класса, а не экземпляра, на что и указывает ClassVar. А вместе с Protocol они требуют, чтобы это поле было определено в одном из потомков.

Information

Rating
Does not participate
Registered
Activity