Проверьте свой ~/.ssh/config

Вставьте конфиг и получите список строк, которые стоит поправить: шифры, от которых OpenSSH давно отказывается, MAC на MD5 и SHA-1, обмен ключами без curve25519, выключенная проверка ключа хоста. Всё считается в этой вкладке.

Дело не в том, что ваш конфиг плохой. Обычно он нормальный. Дело в том, что плохое в нём ломается молча: повторённая директива игнорируется, опечатка не делает ничего, слабый шифр просто договаривается.

Вставьте сюда

Никуда не отправляется. После загрузки страница не делает ни одного сетевого запроса — откройте вкладку «Сеть» и убедитесь. Счётчиков здесь тоже нет, поэтому спорить не о чем: конфиг остаётся в браузере просто потому, что уходить ему некуда.

Или соберите конфиг с нуля

Заполните то, что знаете. Пустые поля не угадываются, а просто не попадают в вывод; строки с алгоритмами подставляются те, которые стоит иметь.

Что проверяется и что означает каждая находка

  • Устаревшие шифры. 3des-cbc, arcfour, blowfish-cbc и всё остальное с окончанием -cbc. За режимом CBC в SSH тянется длинная история атак на дополнение, и OpenSSH перестал предлагать эти шифры по умолчанию много лет назад.
  • Слабые MAC. Всё, построенное на MD5 и SHA-1, плюс umac-64. Отдельно, уровнем ниже, отмечаются MAC без суффикса -etm@openssh.com: они считают код целостности до шифрования, а не после.
  • Обмен ключами. Строка KexAlgorithms, в которой нет ни curve25519-sha256, ни ecdh-sha2-nistp521, и любой обмен, всё ещё построенный на SHA-1.
  • Проверка ключа хоста. StrictHostKeyChecking со значением no — ошибка; accept-new — замечание; UserKnownHostsFile, направленный в /dev/null, — ошибка, потому что стирает саму память, по которой подмену ключа можно заметить.
  • Пароли и агент. PasswordAuthentication yes и ForwardAgent yes — оба замечаниями: это выбор, а не ошибка, но выбор стоит делать осознанно.
  • Строение файла. Неизвестные директивы, незакрытые кавычки, пустые значения и повторы внутри одного блока.

Находка, которая удивляет чаще всего

Повтор директивы. OpenSSH читает блок сверху вниз и оставляет первое встреченное значение для каждого ключевого слова; всё, что ниже, отбрасывается без единого слова. То есть строка Port, дописанная в конец блока, где такая уже есть, не делает ничего.

Именно этим обычно объясняется «я поменял настройку, а она не применилась». Проверка показывает, какая строка выиграла на самом деле.

Вопросы, которые задают на самом деле

Мой .ssh/config уходит на сервер?

Нет. Проверки работают в вашем браузере. Страница загружает один скрипт и после этого не делает ни одного запроса — в нём нет ни fetch, ни XMLHttpRequest, ни отправки формы. Откройте вкладку «Сеть» в инструментах разработчика и вставьте конфиг: не уйдёт ничего.

Какой порядок Ciphers считается безопасным?

chacha20-poly1305@openssh.com, дальше aes256-gcm@openssh.com, aes128-gcm@openssh.com и aes256-ctr. Шифры с встроенной аутентификацией идут первыми, потому что проверяют целостность сами. Всё, что заканчивается на -cbc, место в конце списка или нигде.

chacha20-poly1305 — это безопасно?

Да, и он стоит у OpenSSH по умолчанию не случайно. Он быстр на машинах без аппаратного AES и несёт проверку целостности сам, поэтому отдельный MAC ему не нужен. Если он выбран в Ciphers, строка MACs к таким сессиям не относится вовсе.

Нужно ли вообще задавать Ciphers?

Обычно нет. Умолчания OpenSSH сегодня хорошие, а прибитый список вы унаследуете на годы вперёд. Задавать его стоит, только если этого требует чей-то стандарт, и пересматривать при каждом обновлении OpenSSH.

Что делает StrictHostKeyChecking=accept-new?

Принимает ключ незнакомого хоста без вопроса и по-прежнему останавливает соединение, если ключ известного хоста сменился. Для одноразовых машин это разумный размен, для серверов, которыми вы дорожите, — плохой. Поэтому проверка помечает его замечанием, а не ошибкой.

Почему повтор директивы считается проблемой?

Потому что OpenSSH берёт в блоке первое значение и молча игнорирует остальные. Вторая строка Port ниже не делает ничего — и это самая частая причина фразы «я же поправил, а не применяется».

Откуда это взялось

Это те же требования, по которым устроено подключение в Conchshell: ключи хоста Ed25519 первыми, обмен ключами через curve25519-sha256, учётные данные под XChaCha20-Poly1305 с ключом от Argon2id, а подтверждение ключа хоста рисует операционная система, а не приложение.

Скачать Conchshell бесплатно

Что почитать дальше