macOS Tahoe 26.3 Сломал SSH: Изменение Чувствительности к Регистру, Удаление Ключей DSA и Полное Руководство по Исправлению
macOS Tahoe 26.3 без предупреждения изменил обработку имён пользователей SSH на чувствительную к регистру и отключил ключи ssh-dss. Полное руководство по устранению проблем с SSH-подключением, обновлению конфигурации и переходу на ключи Ed25519.
Apple выпустила macOS Tahoe 26.3 11 февраля 2026 года, и для тысяч разработчиков и системных администраторов SSH-подключения мгновенно перестали работать. Без предупреждения. Без помощника миграции. Без упоминания в примечаниях к выпуску. В один день вы могли выполнить ssh administrator@вашсервер, а на следующий день получали Connection closed by 10.10.83.28 port 22. Если вы использовали ключи DSA для аутентификации на устаревшей инфраструктуре, они полностью прекратили работу. Это руководство объясняет, что именно изменилось, почему это произошло и как исправить все затронутые рабочие процессы — от интерактивных сессий до автоматизированных CI/CD-конвейеров.
Ключевые Выводы
- macOS Tahoe 26.3 применяет чувствительные к регистру SSH-имена пользователей. Ввод
administratorвместоAdministratorтеперь приводит к немедленному закрытию соединения без запроса пароля. - Ключи ssh-dss (DSA) полностью удалены. OpenSSH 10.0, поставляемый с Tahoe 26.3, полностью исключил поддержку DSA из бинарного файла. Нет флага конфигурации для его повторного включения.
- Теперь появляются предупреждения об обмене ключами с квантовой защитой при подключении к серверам, не поддерживающим
mlkem768x25519-sha256илиsntrup761x25519-sha512. - Ed25519 является рекомендуемым типом ключа для всех новых SSH-ключей. Он быстрее, безопаснее и создаёт подписи меньшего размера, чем RSA.
- Каждый файл
~/.ssh/configнеобходимо проверить на несоответствие регистра в директивахUserи любые ссылки наssh-dssвHostKeyAlgorithmsилиPubkeyAcceptedAlgorithms.
Содержание
- Что Именно Изменилось в SSH в macOS Tahoe 26.3
- Диагностика Сбоев SSH-подключений После Обновления
- Понимание Изменения Чувствительности к Регистру
- Понимание Удаления Ключей DSA
- Предупреждения об Обмене Ключами с Квантовой Защитой
- Пошаговое Исправление: Проблемы с Регистром
- Пошаговое Исправление: Переход с DSA на Ed25519
- Полное Руководство по Аудиту Конфигурации SSH
- Изменения SSH-агента и Интеграция с Keychain
- Влияние на CI/CD-конвейеры и Автоматизацию
- Влияние на Рабочие Процессы Удалённой Разработки
- Обходные Решения для Устаревшей Инфраструктуры
- Лучшие Практики Безопасности SSH в 2026 году
- Часто Задаваемые Вопросы
- Заключение
Что Именно Изменилось в SSH в macOS Tahoe 26.3
macOS Tahoe 26.3 поставляется с OpenSSH 10.0, который вводит три критических изменения, влияющих на повседневные SSH-рабочие процессы. Apple не выделила ни одно из них в пользовательских примечаниях к выпуску, оставив разработчикам обнаруживать их через неудачные подключения.
Изменение 1: Сопоставление Имён Пользователей с Учётом Регистра
До Tahoe 26.3 SSH-клиент на macOS был снисходителен к регистру имён пользователей. Вы могли подключаться с ssh administrator@сервер, ssh Administrator@сервер или даже ssh ADMINISTRATOR@сервер, и удалённый сервер правильно разрешал имя пользователя, при условии что базовая операционная система соответствовала учётной записи. После обновления SSH-клиент применяет строгое сопоставление регистра ещё до полного установления соединения. Если регистр не соответствует тому, что ожидает удалённый сервер, соединение немедленно закрывается — до завершения аутентификации паролем или обмена ключами.
Изменение 2: Полное Удаление DSA (ssh-dss)
OpenSSH устаревает DSA с версии 7.0 в 2015 году. Процесс устаревания следовал чёткой хронологии:
| Дата | Версия OpenSSH | Статус DSA |
|---|---|---|
| 2015 | 7.0 | Отключён по умолчанию, можно включить через конфиг |
| 2024 | 9.x | Опция времени компиляции, включён по умолчанию |
| Середина 2024 | 9.x | Опция времени компиляции, отключён по умолчанию |
| Апрель 2025 | 10.0 | Полностью удалён из кодовой базы |
| Февраль 2026 | 10.0 (macOS Tahoe 26.3) | Доставляется всем пользователям macOS |
В macOS Tahoe 26.3 не существует обходного решения PubkeyAcceptedAlgorithms +ssh-dss. Алгоритм отсутствует в бинарном файле. Любая конфигурация SSH, ссылающаяся на ssh-dss, выдаст ошибку Bad key types.
Изменение 3: Предупреждения об Обмене Ключами с Квантовой Защитой
OpenSSH 10.0 ввёл предупреждение, которое срабатывает при подключении к серверам, не поддерживающим алгоритмы обмена ключами с квантовой защитой. Предупреждение гласит:
WARNING: connection is not using a post-quantum key exchange algorithm.
This session may be vulnerable to 'store now, decrypt later' attacks.
Хотя это предупреждение, а не жёсткий сбой, оно создаёт шум в выводе терминала и может нарушить работу автоматизированных скриптов, анализирующих вывод SSH.
Что Не Изменилось
Стоит отметить, что осталось прежним:
- Ключи RSA продолжают работать (с алгоритмами подписи
rsa-sha2-256иrsa-sha2-512) - Ключи ECDSA продолжают работать (хотя Ed25519 предпочтительнее)
- Перенаправление портов SSH, туннелирование и ProxyJump работают идентично
- Формат файла
~/.ssh/known_hostsне изменился
Если вы новичок в SSH на macOS или настраиваете среду разработки с нуля, наше руководство по настройке разработчика macOS Tahoe охватывает полную начальную конфигурацию.
Диагностика Сбоев SSH-подключений После Обновления
Прежде чем вносить какие-либо изменения, необходимо определить, какая из трёх проблем влияет на ваши подключения. Подробный вывод SSH является основным инструментом диагностики.
Шаг 1: Включить Подробный Вывод SSH
Запустите неудачную команду SSH с тройными флагами подробности, чтобы увидеть полное согласование рукопожатия:
ssh -vvv user@hostname
Это выводит детальную информацию, показывающую каждый этап соединения. Обратите внимание на следующие конкретные шаблоны:
Шаблон сбоя чувствительности к регистру:
debug1: Connecting to 10.10.83.28 [10.10.83.28] port 22.
debug1: Connection established.
debug1: identity file /Users/you/.ssh/id_ed25519 type 3
debug3: receive packet: type 7
Connection closed by 10.10.83.28 port 22
Ключевым индикатором является то, что соединение закрывается после установления, но до любой попытки аутентификации. Нет сообщения «Permission denied» — соединение просто обрывается.
Шаблон сбоя ключа DSA:
/Users/you/.ssh/config line 15: Bad key types '+ssh-dss'.
или:
Bad key types '+ssh-rsa,ssh-dss'
Эта ошибка появляется немедленно, когда SSH-клиент анализирует файл конфигурации, до любой попытки подключения.
Шаблон предупреждения о постквантовой защите:
WARNING: connection is not using a post-quantum key exchange algorithm.
This session may be vulnerable to 'store now, decrypt later' attacks.
Это появляется во время обмена ключами, но не мешает завершению соединения.
Шаг 2: Проверить Версию SSH-клиента
Убедитесь, какая версия OpenSSH запущена:
ssh -V
Ожидаемый вывод в macOS Tahoe 26.3:
OpenSSH_10.0p1, LibreSSL 3.3.6
Если вы видите более старую версию, возможно, у вас установлен OpenSSH через Homebrew с приоритетом. Проверьте, какой бинарный файл используется:
which ssh
Системный SSH находится в /usr/bin/ssh. Если вы видите /opt/homebrew/bin/ssh или /usr/local/bin/ssh, вы используете версию Homebrew, которая может вести себя иначе.
Шаг 3: Тестирование с Явными Параметрами
Изолируйте проблему, тестируя с явным регистром имени пользователя и типом ключа:
# Тест чувствительности к регистру - попробуйте оба варианта
ssh -vvv Administrator@hostname
ssh -vvv administrator@hostname
# Тест без вмешательства файла конфигурации
ssh -F /dev/null -vvv user@hostname
# Тест с конкретным ключом
ssh -vvv -i ~/.ssh/id_ed25519 user@hostname

Шаг 4: Проверить Файл Конфигурации SSH на Ошибки
Проанализируйте файл конфигурации для выявления строк, ссылающихся на устаревшие алгоритмы:
# Проверить наличие ссылок на ssh-dss
grep -n "ssh-dss" ~/.ssh/config
# Проверить ссылки ssh-dss в системной конфигурации
grep -n "ssh-dss" /etc/ssh/ssh_config
# Проверить все директивы User для проверки регистра
grep -n "User " ~/.ssh/config
Для более глубокого понимания использования Терминала в macOS Tahoe обратитесь к нашему руководству по терминалу macOS Tahoe.
Понимание Изменения Чувствительности к Регистру
Почему Это Изменение Нарушает Соединения
В большинстве Unix-подобных систем имена пользователей чувствительны к регистру на уровне операционной системы. Пользователь с именем Administrator технически является другой учётной записью, нежели administrator. Однако сам протокол SSH (RFC 4252) указывает, что имена пользователей «чувствительны к регистру», но признаёт, что реализации сервера могут выбрать иной подход.
До macOS Tahoe 26.3 SSH-клиент macOS был снисходителен. Когда вы вводили ssh administrator@сервер, клиент отправлял имя пользователя как есть, и многие SSH-серверы (особенно работающие на Windows, macOS или сетевых устройствах) нормализовали регистр при аутентификации. Соединение устанавливалось, потому что сервер брал на себя задачу сопоставления administrator с учётной записью Administrator.
С OpenSSH 10.0 SSH-клиент на macOS теперь выполняет более строгую проверку перед аутентификацией. Если сервер возвращает раннее сообщение протокола, указывающее на несоответствие регистра, соединение завершается до того, как аутентификация продолжится. Это означает:
- Соединения с серверами Windows (которые исторически нормализовывали регистр) могут прерваться
- Соединения с сетевыми устройствами (маршрутизаторы, коммутаторы, NAS-устройства), использующими имена пользователей без учёта регистра, могут прерваться
- Соединения с серверами macOS, где учётная запись администратора —
Administrator(с заглавной A), но скрипты используютadministrator(строчная a), прервутся - Соединения с серверами Linux с меньшей вероятностью будут затронуты, так как имена пользователей Linux уже чувствительны к регистру
Распространённые Сценарии, Которые Нарушаются
Сценарий 1: Удалённое Управление macOS через macOS
Многие системные администраторы подключаются к удалённым Mac с помощью:
ssh [email protected]
Но учётная запись администратора macOS по умолчанию создаётся как Administrator с заглавной A. Это работало до Tahoe 26.3 и перестаёт работать после.
Сценарий 2: Управление Сетевыми Устройствами
Подключение к маршрутизаторам, коммутаторам, межсетевым экранам и NAS-устройствам часто использует общие имена пользователей:
ssh [email protected]
ssh [email protected]
Если устройство хранит имя пользователя как Admin или ROOT, эти соединения теперь будут молча завершаться ошибкой.
Сценарий 3: Псевдонимы Конфигурации SSH
У многих разработчиков есть записи конфигурации SSH с неправильным регистром, которые ранее работали:
# ~/.ssh/config - это может теперь сломаться
Host production
HostName prod.example.com
User deploy # Сервер ожидает "Deploy"
IdentityFile ~/.ssh/prod_key
Понимание Удаления Ключей DSA
Аргументы Безопасности Против DSA
DSA (Digital Signature Algorithm), реализованный в SSH, использует фиксированную длину ключа 1024 бита и SHA-1 для хэширования. Эта комбинация обеспечивает приблизительно 80 бит симметричной безопасности — значительно ниже минимума в 128 бит, рекомендованного современными стандартами безопасности.
Конкретные слабые стороны ключей DSA:
| Свойство | DSA (ssh-dss) | Ed25519 | RSA-4096 |
|---|---|---|---|
| Размер ключа | 1024 бита | 256 бит | 4096 бит |
| Алгоритм хэширования | SHA-1 | SHA-512 | SHA-256/512 |
| Уровень безопасности | ~80 бит | ~128 бит | ~128 бит |
| Размер подписи | 40 байт | 64 байта | 512 байт |
| Скорость подписи | Медленная | Быстрая | Умеренная |
| Скорость верификации | Медленная | Быстрая | Умеренная |
| Уязвимость к смещению | Высокая | Нет | Нет |
DSA особенно уязвим к ошибкам реализации. Если генератор случайных чисел, используемый при подписи, имеет какое-либо смещение, закрытый ключ можно восстановить из небольшого числа подписей. Это использовалось в реальных атаках.
Что «Удалён» Фактически Означает
В предыдущих версиях macOS DSA был отключён по умолчанию, но мог быть повторно включён с параметрами конфигурации:
# Это работало на macOS Sequoia и более ранних
Host legacy-server
HostKeyAlgorithms +ssh-dss
PubkeyAcceptedAlgorithms +ssh-dss
В macOS Tahoe 26.3 эти строки конфигурации сами вызывают ошибки, поскольку бинарный файл SSH больше не распознаёт ssh-dss как допустимый идентификатор алгоритма. Ошибка:
/Users/you/.ssh/config line 8: Bad key types '+ssh-dss'.
Это означает:
- Вы не можете использовать ключи DSA для аутентификации (вход с помощью открытого ключа)
- Вы не можете принимать ключи хоста DSA с серверов
- Вы не можете даже ссылаться на
ssh-dssв ваших файлах конфигурации без возникновения ошибок - Инструмент
ssh-keygenбольше не может генерировать ключи DSA
Проверка Наличия Ключей DSA
Перед переходом проверьте существующие ключи:
# Список всех SSH-ключей с их типами
for key in ~/.ssh/*.pub; do
echo "=== $key ==="
ssh-keygen -l -f "$key"
done
Пример вывода:
=== /Users/you/.ssh/id_dsa.pub ===
1024 SHA256:abc123... you@mac (DSA) # Этот ключ нужно заменить
=== /Users/you/.ssh/id_ed25519.pub ===
256 SHA256:xyz789... you@mac (ED25519) # Этот ключ в порядке
=== /Users/you/.ssh/id_rsa.pub ===
3072 SHA256:def456... you@mac (RSA) # Этот ключ в порядке
Любой ключ, идентифицированный как (DSA), должен быть заменён. Если вы найдёте такой, не удаляйте его сразу — он нужен вам для определения серверов, на которых он авторизован.
Предупреждения об Обмене Ключами с Квантовой Защитой
Что Означает Предупреждение
OpenSSH 10.0 ввёл обмен ключами с постквантовой защитой с использованием алгоритма ML-KEM (ранее CRYSTALS-Kyber), гибридизированного с X25519. Алгоритм обмена ключами по умолчанию теперь mlkem768x25519-sha256 с sntrup761x25519-sha512 в качестве запасного варианта.
При подключении к серверу, не поддерживающему ни один из этих алгоритмов, OpenSSH отображает:
WARNING: connection is not using a post-quantum key exchange algorithm.
This session may be vulnerable to 'store now, decrypt later' attacks.
Атака «сохранить сейчас, расшифровать позже» означает, что злоумышленник может записать ваш зашифрованный SSH-трафик сегодня и расшифровать его в будущем, когда квантовые компьютеры станут способны взломать классические алгоритмы обмена ключами.
Когда Вы Увидите Это Предупреждение
- Подключение к серверам под управлением OpenSSH 8.x или более ранних
- Подключение к сетевым устройствам со встроенными реализациями SSH
- Подключение к облачным экземплярам с более старыми версиями SSH-демона
- Подключение к GitHub, GitLab или Bitbucket (может поддерживать или не поддерживать алгоритмы PQ)
Подавление Предупреждения
Если вы понимаете риск и хотите скрыть предупреждение, добавьте следующее в ~/.ssh/config:
# Глобальное подавление предупреждений о постквантовой защите
Host *
WarnWeakCrypto no
Или только для конкретных хостов:
Host legacy-server
HostName 192.168.1.100
WarnWeakCrypto no
Идеальное решение — обновить ваши серверы до OpenSSH 9.0 или более поздней версии, которая поддерживает sntrup761x25519-sha512, или OpenSSH 9.9+, которая поддерживает более новый mlkem768x25519-sha256.
Пошаговое Исправление: Проблемы с Регистром
Исправление 1: Определить Правильный Регистр Имени Пользователя
Сначала проверьте точное имя пользователя в удалённой системе. Метод зависит от удалённой ОС:
Для удалённых серверов Linux/macOS:
# Если вы всё ещё можете войти через консоль, физический доступ или другой SSH-клиент
grep "ваш_пользователь" /etc/passwd
# Или используйте команду id
id
# Пример вывода: uid=501(Administrator) gid=20(staff) groups=...
Для удалённых серверов Windows (OpenSSH):
# В PowerShell на удалённой машине
whoami
# Вывод: DOMAIN\Administrator
Для сетевых устройств:
Проверьте веб-интерфейс управления устройством или документацию для точного формата имени пользователя. Распространённые шаблоны:
- Cisco IOS: как правило, строчные (
admin) - Juniper: как правило, строчные (
root) - Synology NAS: чувствителен к регистру при создании
- QNAP NAS: чувствителен к регистру при создании
Исправление 2: Обновить Файл Конфигурации SSH
Откройте конфигурацию SSH и исправьте все директивы User:
# Открыть файл конфигурации
nano ~/.ssh/config
До (сломано):
Host production
HostName prod.example.com
User administrator
IdentityFile ~/.ssh/prod_key
Host nas
HostName nas.local
User admin
Port 22
После (исправлено):
Host production
HostName prod.example.com
User Administrator
IdentityFile ~/.ssh/prod_key
Host nas
HostName nas.local
User Admin
Port 22
Исправление 3: Обновить Псевдонимы Оболочки и Скрипты
Выполните поиск SSH-команд в конфигурации оболочки:
# Проверить псевдонимы bash
grep -n "ssh " ~/.bashrc ~/.bash_profile 2>/dev/null
# Проверить псевдонимы zsh
grep -n "ssh " ~/.zshrc ~/.zprofile 2>/dev/null
# Проверить SSH-команды в пользовательских скриптах
grep -rn "ssh " ~/scripts/ ~/bin/ 2>/dev/null
Обновите все жёстко заданные имена пользователей, чтобы использовать правильный регистр.
Исправление 4: Обновить Переменные Среды
Некоторые инструменты используют переменные среды для SSH-имён пользователей:
# Проверить переменные среды, связанные с SSH
env | grep -i ssh
env | grep -i user
# Общие переменные для проверки
echo $DEPLOY_USER
echo $SSH_USER
echo $REMOTE_USER
Исправление 5: Проверить Исправление
После внесения изменений проверьте каждое соединение:
# Тестировать с подробным выводом
ssh -v production
# Ожидается: успешная аутентификация
# debug1: Authentication succeeded (publickey).
Пошаговое Исправление: Переход с DSA на Ed25519
Этот раздел описывает полный процесс замены ключей DSA ключами Ed25519. Если вам нужна дополнительная информация о командах Терминала, наше руководство по освоению Mac Terminal охватывает все основы.

Фаза 1: Инвентаризация Ключей DSA
Перед генерацией новых ключей задокументируйте, где используются ваши ключи DSA:
# Шаг 1: Найти все ключи DSA в вашей системе
find ~/.ssh -name "*.pub" -exec grep -l "ssh-dss" {} \;
# Шаг 2: Для каждого ключа DSA проверить, какие серверы его авторизуют
# Запомните отпечаток открытого ключа
ssh-keygen -l -f ~/.ssh/id_dsa.pub
# Шаг 3: Проверить known_hosts на ключи хоста DSA
grep "ssh-dss" ~/.ssh/known_hosts | awk '{print $1}'
Создайте контрольный список миграции:
# Создать файл отслеживания миграции
cat > ~/ssh_migration_checklist.txt << 'EOF'
SSH DSA Key Migration Checklist
===============================
Date: $(date)
DSA Keys Found:
- [ ] ~/.ssh/id_dsa -> Used for: _______________
- [ ] ~/.ssh/id_dsa.pub -> Authorized on: _______________
Servers with DSA Host Keys:
- [ ] server1.example.com
- [ ] 192.168.1.100
Automation/Scripts Using DSA:
- [ ] deploy.sh
- [ ] backup-cron.sh
- [ ] CI/CD pipeline: _______________
EOF
Фаза 2: Генерация Новых Ключей Ed25519
Сгенерируйте новую пару ключей Ed25519 с содержательным комментарием:
# Сгенерировать ключ Ed25519 с описательным комментарием
ssh-keygen -t ed25519 -C "вашеимя@macbook-2026-02" -f ~/.ssh/id_ed25519
# Вас попросят ввести парольную фразу — ИСПОЛЬЗУЙТЕ ЕЁ
# Парольная фраза защищает ваш закрытый ключ, если ваша машина скомпрометирована
Если вам нужны отдельные ключи для разных целей (рекомендуется для изоляции безопасности):
# Ключ для рабочих серверов
ssh-keygen -t ed25519 -C "work-servers-2026" -f ~/.ssh/id_ed25519_work
# Ключ для личных проектов
ssh-keygen -t ed25519 -C "personal-2026" -f ~/.ssh/id_ed25519_personal
# Ключ для автоматизации CI/CD
ssh-keygen -t ed25519 -C "cicd-automation-2026" -f ~/.ssh/id_ed25519_cicd
Проверьте сгенерированные ключи:
# Проверить новый ключ
ssh-keygen -l -f ~/.ssh/id_ed25519.pub
# Ожидаемый вывод:
# 256 SHA256:abcdef123456... вашеимя@macbook-2026-02 (ED25519)
Фаза 3: Развёртывание Новых Ключей на Серверах
Для каждого сервера, ранее использовавшего ваш ключ DSA, разверните новый открытый ключ Ed25519:
Метод 1: Использование ssh-copy-id (если аутентификация ещё возможна)
Если у вас есть другой рабочий метод аутентификации (пароль, другой ключ):
# Развернуть новый ключ с использованием аутентификации по паролю
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server
# Или указать рабочий ключ для аутентификации во время развёртывания
ssh-copy-id -i ~/.ssh/id_ed25519.pub -o "IdentityFile=~/.ssh/id_rsa" user@server
Метод 2: Ручное развёртывание (если ssh-copy-id недоступен)
# Скопировать содержимое открытого ключа
cat ~/.ssh/id_ed25519.pub | pbcopy
# Войти на сервер любым доступным способом (пароль, консоль и т.д.)
ssh user@server
# На удалённом сервере добавить ключ
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "ВСТАВЬТЕ_ВАШ_ОТКРЫТЫЙ_КЛЮЧ_ЗДЕСЬ" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
Метод 3: Для серверов, к которым нет SSH-доступа
Если ключ DSA был единственным методом аутентификации и больше не работает:
- Используйте веб-консоль управления сервером (если доступна)
- Получите доступ через физическую консоль или IPMI/iLO/iDRAC
- Используйте промежуточный хост с доступом
- Свяжитесь с администратором сервера
Фаза 4: Обновление Конфигурации SSH
Замените ссылки на ключи DSA в конфигурации SSH:
# До
Host old-server
HostName legacy.example.com
User admin
IdentityFile ~/.ssh/id_dsa
HostKeyAlgorithms +ssh-dss
PubkeyAcceptedAlgorithms +ssh-dss
# После
Host old-server
HostName legacy.example.com
User Admin
IdentityFile ~/.ssh/id_ed25519_work
Фаза 5: Очистка Известных Хостов
Удалите устаревшие записи ключей хостов DSA:
# Найти серверы с ключами хостов DSA в known_hosts
grep "ssh-dss" ~/.ssh/known_hosts
# Удалить конкретные записи хостов (ключ хоста будет повторно принят при следующем подключении)
ssh-keygen -R hostname_or_ip
# Или удалить все записи DSA сразу
# Сначала создайте резервную копию файла
cp ~/.ssh/known_hosts ~/.ssh/known_hosts.backup.$(date +%Y%m%d)
# Затем удалить записи DSA
grep -v "ssh-dss" ~/.ssh/known_hosts > ~/.ssh/known_hosts.tmp
mv ~/.ssh/known_hosts.tmp ~/.ssh/known_hosts
Фаза 6: Проверка Работоспособности
Проверьте каждое серверное соединение:
# Тестировать соединения с подробным выводом
ssh -v old-server
# Убедиться, что предлагается правильный ключ
# Ищите: debug1: Offering public key: /Users/you/.ssh/id_ed25519_work ED25519
# Провести полный тест подключения для всех настроенных хостов
for host in $(grep "^Host " ~/.ssh/config | awk '{print $2}' | grep -v '\*'); do
echo "Testing: $host"
ssh -o ConnectTimeout=5 -o BatchMode=yes "$host" echo "OK" 2>&1
echo "---"
done
Фаза 7: Вывод из Эксплуатации Ключа DSA
После миграции и проверки всех серверов:
# Архивировать старые ключи DSA (не удалять немедленно)
mkdir -p ~/.ssh/deprecated
mv ~/.ssh/id_dsa ~/.ssh/deprecated/id_dsa.retired.$(date +%Y%m%d)
mv ~/.ssh/id_dsa.pub ~/.ssh/deprecated/id_dsa.pub.retired.$(date +%Y%m%d)
chmod 400 ~/.ssh/deprecated/id_dsa.retired.*
Храните архивные ключи не менее 90 дней на случай обнаружения пропущенного сервера.
Полное Руководство по Аудиту Конфигурации SSH
После устранения отдельных проблем выполните полный аудит конфигурации SSH. Это особенно важно, если вы используете SSH на macOS в течение многих лет и накопили записи конфигурации в рамках нескольких обновлений macOS.
Аудит Шаг 1: Проверка Устаревших Алгоритмов
# Проверить ЛЮБЫЕ ссылки на устаревшие алгоритмы
echo "=== Проверяю ~/.ssh/config ==="
grep -n -E "(ssh-dss|ssh-dsa|diffie-hellman-group1-sha1|diffie-hellman-group14-sha1|hmac-sha1-96|hmac-md5)" ~/.ssh/config 2>/dev/null
echo ""
echo "=== Проверяю /etc/ssh/ssh_config ==="
grep -n -E "(ssh-dss|ssh-dsa|diffie-hellman-group1-sha1)" /etc/ssh/ssh_config 2>/dev/null
echo ""
echo "=== Проверяю /etc/ssh/ssh_config.d/ ==="
grep -rn -E "(ssh-dss|ssh-dsa)" /etc/ssh/ssh_config.d/ 2>/dev/null
Аудит Шаг 2: Проверка Синтаксиса Конфигурации
# Проверить синтаксис конфигурации SSH без подключения
ssh -G test-host 2>&1 | head -5
# При наличии ошибок они появятся как:
# /Users/you/.ssh/config line X: Bad key types '...'
Аудит Шаг 3: Проверка Всех Директив User
# Извлечь все директивы User и хосты, к которым они применяются
awk '/^Host /{host=$2} /User /{print host, $0}' ~/.ssh/config
Просмотрите вывод и проверьте регистр каждого имени пользователя.
Аудит Шаг 4: Проверка Прав Доступа к Файлам
SSH строг в отношении прав доступа к файлам. Неправильные права могут вызывать молчаливые сбои:
# Проверить и исправить права доступа к каталогу SSH
echo "=== Права доступа к каталогу ==="
ls -la ~/.ssh/
echo ""
echo "=== Ожидаемые права доступа ==="
echo "~/.ssh/ -> drwx------ (700)"
echo "~/.ssh/config -> -rw------- (600)"
echo "~/.ssh/id_* -> -rw------- (600) для закрытых ключей"
echo "~/.ssh/*.pub -> -rw-r--r-- (644) для открытых ключей"
echo "~/.ssh/authorized_keys -> -rw------- (600)"
echo "~/.ssh/known_hosts -> -rw-r--r-- (644)"
# Исправить права доступа при необходимости
chmod 700 ~/.ssh
chmod 600 ~/.ssh/config 2>/dev/null
chmod 600 ~/.ssh/id_* 2>/dev/null
chmod 644 ~/.ssh/*.pub 2>/dev/null
chmod 600 ~/.ssh/authorized_keys 2>/dev/null
Аудит Шаг 5: Рекомендуемый Современный Шаблон Конфигурации SSH
Вот полный современный шаблон конфигурации SSH, работающий с macOS Tahoe 26.3:
# ~/.ssh/config
# Обновлено для macOS Tahoe 26.3 / OpenSSH 10.0
# Последний аудит: 2026-02-28
# ============================================
# Глобальные настройки по умолчанию
# ============================================
Host *
# Использовать ключи Ed25519 по умолчанию
IdentityFile ~/.ssh/id_ed25519
# Предлагать только ключи, явно настроенные для каждого хоста
IdentitiesOnly yes
# Интеграция с macOS Keychain
UseKeychain yes
AddKeysToAgent yes
# Современные предпочтения обмена ключами
KexAlgorithms mlkem768x25519-sha256,[email protected],curve25519-sha256,[email protected]
# Стабильность соединения
ServerAliveInterval 60
ServerAliveCountMax 3
# Усиление безопасности
HashKnownHosts yes
StrictHostKeyChecking ask
# ============================================
# Рабочие серверы
# ============================================
Host prod-web
HostName prod-web.example.com
User Deploy
IdentityFile ~/.ssh/id_ed25519_work
Port 22
Host staging
HostName staging.example.com
User Deploy
IdentityFile ~/.ssh/id_ed25519_work
Port 22
# ============================================
# Личные серверы
# ============================================
Host homelab
HostName 192.168.1.100
User admin
IdentityFile ~/.ssh/id_ed25519_personal
# ============================================
# Конфигурация промежуточного хоста
# ============================================
Host internal-*
ProxyJump bastion.example.com
User admin
IdentityFile ~/.ssh/id_ed25519_work
Host bastion.example.com
User jump-user
IdentityFile ~/.ssh/id_ed25519_work
ForwardAgent no
Изменения SSH-агента и Интеграция с Keychain
macOS Tahoe 26.3 также вносит тонкие изменения в то, как SSH-агент взаимодействует с macOS Keychain.
Интеграция с Keychain
Специфическая для macOS директива UseKeychain продолжает работать в Tahoe 26.3, но её поведение было уточнено:
# Добавить новый ключ Ed25519 в macOS Keychain
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
# Убедиться, что ключ был добавлен
ssh-add -l
Если ключ был успешно добавлен, вы увидите:
256 SHA256:abcdef123456... вашеимя@macbook-2026-02 (ED25519)
Постоянная Загрузка Ключей
Убедитесь, что ваша конфигурация SSH включает следующие директивы для поддержания постоянства ключей при перезагрузках:
Host *
UseKeychain yes
AddKeysToAgent yes
IdentityFile ~/.ssh/id_ed25519
Без UseKeychain yes вам нужно будет выполнять ssh-add после каждой перезагрузки.
Проверка SSH-агента
# Проверить, запущен ли агент
echo $SSH_AUTH_SOCK
# Вывести загруженные ключи
ssh-add -l
# Если ключи не загружены, добавьте их
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
Для получения дополнительных сведений о настройках безопасности macOS обратитесь к нашему руководству по безопасности и конфиденциальности macOS Tahoe.
Влияние на CI/CD-конвейеры и Автоматизацию
Изменения SSH в macOS Tahoe 26.3 имеют значительные последствия для автоматизированных рабочих процессов. Если ваш CI/CD-конвейер работает на macOS-раннерах (GitHub Actions, GitLab CI, Jenkins на Mac), эти изменения затронут вас после обновления ОС раннера.
GitHub Actions
Если вы используете раннеры macos-latest или macos-15, бинарный файл SSH в конечном итоге будет обновлён. Проведите аудит рабочих процессов сейчас:
# .github/workflows/deploy.yml
# ДО (потенциально сломано)
- name: Deploy
run: |
ssh administrator@${{ secrets.DEPLOY_HOST }} "cd /app && git pull"
# ПОСЛЕ (исправлено)
- name: Deploy
run: |
ssh Administrator@${{ secrets.DEPLOY_HOST }} "cd /app && git pull"
Проверьте секреты развёртывания:
DEPLOY_USER— убедитесь, что регистр соответствует удалённой учётной записиSSH_PRIVATE_KEY— убедитесь, что это не ключ DSAKNOWN_HOSTS— убедитесь, что нет записей ключей хостов DSA
GitLab CI
# .gitlab-ci.yml
deploy:
before_script:
# Проверить тип ключа перед развёртыванием
- ssh-keygen -l -f ~/.ssh/id_deploy
# Убедиться, что это НЕ DSA
- |
if ssh-keygen -l -f ~/.ssh/id_deploy | grep -q "DSA"; then
echo "ERROR: DSA key detected. Migration required."
exit 1
fi
script:
# Использовать правильный регистр для имени пользователя
- ssh -o StrictHostKeyChecking=no Deploy@$DEPLOY_HOST "deploy.sh"
Jenkins
Для конвейеров Jenkins, работающих на агентах macOS:
pipeline {
agent { label 'macos' }
stages {
stage('Pre-flight SSH Check') {
steps {
sh '''
# Проверить версию SSH
ssh -V
# Проверить ключи DSA в учётных данных
for key in ~/.ssh/*.pub; do
if ssh-keygen -l -f "$key" | grep -q "DSA"; then
echo "WARNING: DSA key found: $key"
exit 1
fi
done
echo "SSH pre-flight check passed"
'''
}
}
}
}
Ansible Playbooks
Если вы запускаете Ansible с управляющего узла macOS:
# ansible.cfg
[defaults]
# Обеспечить правильный бинарный файл SSH
ssh_executable = /usr/bin/ssh
# Принудительные аргументы SSH
[ssh_connection]
ssh_args = -o IdentitiesOnly=yes -o IdentityFile=~/.ssh/id_ed25519_ansible
Проверьте инвентарь Ansible на регистр имени пользователя:
# inventory.ini
# ДО
[webservers]
web1.example.com ansible_user=administrator
# ПОСЛЕ
[webservers]
web1.example.com ansible_user=Administrator
Автоматизированные Скрипты Резервного Копирования
Проверьте все cron-задания или задачи launchd, использующие SSH:
# Найти все cron-задания со ссылками на SSH
crontab -l 2>/dev/null | grep -i ssh
# Найти plist-файлы launchd со ссылками на SSH
grep -rl "ssh" ~/Library/LaunchAgents/ /Library/LaunchAgents/ /Library/LaunchDaemons/ 2>/dev/null
# Проверить скрипты резервного копирования rsync (rsync использует SSH по умолчанию)
grep -rn "rsync.*@" ~/scripts/ ~/bin/ 2>/dev/null
Влияние на Рабочие Процессы Удалённой Разработки
VS Code Remote SSH
Расширение Remote SSH Visual Studio Code хранит конфигурации подключений, которые могут быть затронуты:
# Местоположение конфигурации SSH VS Code
cat ~/Library/Application\ Support/Code/User/settings.json | grep -A5 "remote.SSH"
# Проверить ссылки SSH в конфигурации VS Code
grep -n "ssh" ~/Library/Application\ Support/Code/User/settings.json 2>/dev/null
Обновите SSH-цели VS Code, чтобы использовать правильный регистр имени пользователя и не-DSA ключи.
JetBrains Gateway / Удалённая Разработка
IDE JetBrains хранят конфигурации SSH отдельно:
# Проверить конфигурации SSH JetBrains
find ~/Library/Application\ Support/JetBrains -name "*.xml" -exec grep -l "ssh" {} \; 2>/dev/null
tmux и Постоянные Сессии
Если вы используете tmux или screen через SSH, скрипты переподключения нужно обновить:
# Распространённый псевдоним переподключения tmux - проверить регистр имени пользователя
alias tm='ssh -t Administrator@server "tmux attach || tmux new"'
Для комплексной настройки среды разработчика обратитесь к нашему исчерпывающему руководству по macOS Tahoe для разработчиков.
Обходные Решения для Устаревшей Инфраструктуры
Некоторые среды не могут быть обновлены немедленно. Сетевые устройства, встроенные системы и устаревшие серверы могут требовать DSA ещё многие годы. Вот практические обходные решения, упорядоченные от наиболее до наименее рекомендуемых.
Обходное Решение 1: Использование Промежуточного Хоста (Рекомендуется)
Настройте Linux-бастион, который всё ещё поддерживает DSA, и используйте его как прокси:
# ~/.ssh/config
Host legacy-device
HostName 192.168.1.1
User admin
ProxyJump bastion
Host bastion
HostName bastion.example.com
User jump
IdentityFile ~/.ssh/id_ed25519
Хост-бастион запускает более старый OpenSSH (или скомпилированный с поддержкой DSA) и обрабатывает согласование DSA с устаревшим устройством. Вашему Mac нужно только аутентифицироваться на бастионе с использованием Ed25519.
Обходное Решение 2: Использование Контейнера Docker
Запустите более старый клиент OpenSSH внутри контейнера Docker:
# Создать Dockerfile для устаревшего SSH
cat > ~/legacy-ssh/Dockerfile << 'EOF'
FROM alpine:3.18
RUN apk add --no-cache openssh-client
ENTRYPOINT ["ssh"]
EOF
# Собрать его
docker build -t legacy-ssh ~/legacy-ssh/
# Использовать для подключения к устаревшим устройствам
docker run --rm -it \
-v ~/.ssh:/root/.ssh:ro \
legacy-ssh \
-o HostKeyAlgorithms=+ssh-dss \
-o PubkeyAcceptedKeyTypes=+ssh-dss \
admin@legacy-device
Создайте псевдоним оболочки для удобства:
# Добавить в ~/.zshrc
alias legacy-ssh='docker run --rm -it -v ~/.ssh:/root/.ssh:ro legacy-ssh'
# Использование
legacy-ssh -o HostKeyAlgorithms=+ssh-dss admin@legacy-device
Обходное Решение 3: Установка Более Старого OpenSSH через Homebrew
Вы можете скомпилировать OpenSSH 9.7p1 (последнюю версию с поддержкой DSA) из исходного кода:
# Установить зависимости
brew install openssl@3
# Скачать исходный код OpenSSH 9.7p1
curl -O https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.7p1.tar.gz
tar xzf openssh-9.7p1.tar.gz
cd openssh-9.7p1
# Настроить с поддержкой DSA и пользовательским префиксом
./configure \
--prefix=$HOME/openssh97 \
--with-ssl-dir=$(brew --prefix openssl@3)
# Скомпилировать и установить
make -j$(sysctl -n hw.ncpu)
make install
# Использовать более старый бинарный файл SSH
~/openssh97/bin/ssh -o HostKeyAlgorithms=+ssh-dss admin@legacy-device
Создайте псевдоним для устаревших подключений:
# Добавить в ~/.zshrc
alias ssh-legacy='~/openssh97/bin/ssh -o HostKeyAlgorithms=+ssh-dss -o PubkeyAcceptedKeyTypes=+ssh-dss'
# Использование
ssh-legacy admin@old-router
Обходное Решение 4: Использование Виртуальной Машины Linux
Если вы используете UTM, Parallels или VMware Fusion:
- Настройте лёгкую VM Linux (Alpine или Ubuntu Server)
- SSH с вашего Mac на VM (используя Ed25519)
- С VM выполните SSH на устаревшее устройство (используя DSA)
Это обеспечивает полную изоляцию и не требует модификации установки SSH на macOS.
Долгосрочно: Планируйте Замену Устройств
Если вы полагаетесь на DSA, потому что ваши сетевые устройства не поддерживают современные алгоритмы, это чёткий сигнал того, что эти устройства достигли конца жизненного цикла с точки зрения безопасности. Планируйте график замены:
- Маршрутизаторы/Коммутаторы: большинство корпоративных поставщиков поддерживают Ed25519 с 2018 года
- NAS-устройства: Synology, QNAP и TrueNAS все поддерживают Ed25519
- Устаревшие серверы: если работают OpenSSH старше 6.5, вся система нуждается в обновлении
Лучшие Практики Безопасности SSH в 2026 году
Используя изменения macOS Tahoe 26.3 как катализатор, сейчас хороший момент для внедрения комплексных улучшений безопасности SSH.
Лучшие Практики Управления Ключами
1. Используйте отдельные ключи для разных ролей:
# Рабочая инфраструктура
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_work -C "work-2026"
# Личные проекты
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_personal -C "personal-2026"
# CI/CD и автоматизация
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_automation -C "automation-2026"
# Хостинг Git (GitHub, GitLab)
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_git -C "git-2026"
2. Всегда используйте парольную фразу:
Парольная фраза шифрует ваш закрытый ключ в состоянии покоя. Если ваша машина скомпрометирована, злоумышленник не сможет использовать ваши SSH-ключи без парольной фразы. В сочетании с интеграцией macOS Keychain вам нужно вводить парольную фразу только один раз.
# При запросе во время генерации ключей:
Enter passphrase (empty for no passphrase): [введите надёжную парольную фразу]
Enter same passphrase again: [подтвердите]
3. Ротируйте ключи ежегодно:
Включайте год в комментарии к вашим ключам, чтобы знать, когда они были сгенерированы:
ssh-keygen -t ed25519 -C "вы@компания-2026-Q1" -f ~/.ssh/id_ed25519_work_2026
Когда год заканчивается, генерируйте новые ключи, разворачивайте их и выводите старые из эксплуатации.
4. Устанавливайте правильные права доступа к файлам:
# Закрытые ключи: только чтение для владельца
chmod 400 ~/.ssh/id_ed25519*
chmod 600 ~/.ssh/id_ed25519*.pub
# Открытые ключи можно сделать доступными для чтения всем
chmod 644 ~/.ssh/id_ed25519*.pub
# Сам каталог SSH
chmod 700 ~/.ssh
# Файл конфигурации
chmod 600 ~/.ssh/config
Усиление Безопасности на Стороне Сервера
Если вы управляете SSH-серверами, воспользуйтесь этой возможностью для их укрепления:
# /etc/ssh/sshd_config рекомендуемые настройки
# Отключить аутентификацию по паролю (использовать только ключи)
PasswordAuthentication no
# Отключить вход root
PermitRootLogin no
# Разрешить только определённых пользователей
AllowUsers deploy admin
# Использовать современный обмен ключами
KexAlgorithms mlkem768x25519-sha256,[email protected],curve25519-sha256
# Использовать современные алгоритмы ключей хостов
HostKeyAlgorithms ssh-ed25519,rsa-sha2-512,rsa-sha2-256
# Использовать современные шифры
Ciphers [email protected],[email protected],[email protected]
# Использовать современные MAC
MACs [email protected],[email protected]
# Ограничение частоты
MaxAuthTries 3
MaxSessions 5
LoginGraceTime 30
После изменения sshd_config всегда тестируйте перед отключением:
# Проверить конфигурацию
sudo sshd -t
# При отсутствии ошибок перезапустить sshd
sudo systemctl restart sshd
# ВАЖНО: Держите текущую сессию открытой и тестируйте с НОВЫМ соединением
# перед закрытием существующего
Мониторинг и Оповещение
Настройте мониторинг для событий аутентификации SSH:
# Мониторинг auth.log для неудачных попыток (серверы Linux)
tail -f /var/log/auth.log | grep "sshd"
# Мониторинг системного журнала macOS для событий SSH
log stream --predicate 'process == "sshd"' --level info
Устранение Распространённых Ошибок
Ошибка: "Connection closed by X.X.X.X port 22"
Причина: Несоответствие регистра имени пользователя.
Исправление:
# Определить правильное имя пользователя
ssh -vvv user@host 2>&1 | grep "debug1: Sending"
# Попробуйте противоположный регистр
ssh Administrator@host # если 'administrator' не сработало
ssh administrator@host # если 'Administrator' не сработало
Ошибка: "Bad key types '+ssh-dss'"
Причина: Конфигурация SSH ссылается на удалённый алгоритм DSA.
Исправление:
# Найти и отредактировать проблемную строку
grep -n "ssh-dss" ~/.ssh/config
# Удалить или заменить ссылку на алгоритм
# До: HostKeyAlgorithms +ssh-dss
# После: (удалить всю строку или заменить современными алгоритмами)
Ошибка: "Bad key types '+ssh-rsa,ssh-dss'"
Причина: Конфигурация SSH имеет составной список алгоритмов, включающий DSA.
Исправление:
# До
HostKeyAlgorithms +ssh-rsa,ssh-dss
PubkeyAcceptedAlgorithms +ssh-rsa,ssh-dss
# После (удалить ssh-dss, оставить ssh-rsa при необходимости для устаревшего RSA)
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa
Примечание: ssh-rsa (с подписями SHA-1) также устарел. Используйте rsa-sha2-256 или rsa-sha2-512, если необходимо использовать RSA:
HostKeyAlgorithms rsa-sha2-512,rsa-sha2-256
PubkeyAcceptedAlgorithms rsa-sha2-512,rsa-sha2-256
Ошибка: "No matching host key type found"
Причина: Удалённый сервер предлагает только ключи хостов DSA.
Исправление: Это требует действий на стороне сервера. Сгенерируйте новые ключи хостов на сервере:
# На удалённом сервере (при наличии консольного доступа)
sudo ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ""
sudo ssh-keygen -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key -N ""
sudo systemctl restart sshd
Если вы не можете обновить сервер, используйте промежуточный хост или обходные решения Docker, описанные выше.
Ошибка: "WARNING: connection is not using a post-quantum key exchange algorithm"
Причина: Удалённый сервер не поддерживает постквантовый обмен ключами.
Исправление:
# Подавить для конкретного хоста
# Добавить в ~/.ssh/config:
Host old-server
WarnWeakCrypto no
# Или подавить глобально (не рекомендуется)
Host *
WarnWeakCrypto no
Ошибка: "Permission denied (publickey)"
Причина: После миграции ключей новый ключ не авторизован на сервере.
Исправление:
# Проверить, какой ключ предлагается
ssh -v user@host 2>&1 | grep "Offering public key"
# Развернуть правильный ключ
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host
Ошибка: "WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED"
Причина: После удаления записей ключей хостов DSA из known_hosts сервер предлагает другой тип ключа хоста.
Исправление:
# Удалить старую запись ключа хоста
ssh-keygen -R hostname
# Переподключиться и принять новый ключ хоста
ssh user@hostname
# Вас попросят проверить отпечаток нового ключа хоста
Понимание Более Широкого Контекста
Изменения SSH в macOS Tahoe 26.3 являются частью более широкой тенденции в отрасли. Понимание этого контекста поможет вам подготовиться к будущим изменениям, а не реагировать на каждое из них.
Хронология Выпусков OpenSSH
| Версия | Дата | Ключевые Изменения |
|---|---|---|
| 7.0 | 2015 | DSA отключён по умолчанию |
| 8.2 | 2020 | Подписи SHA-1 устарели для RSA |
| 8.8 | 2022 | Подписи RSA SHA-1 отключены по умолчанию |
| 9.0 | 2022 | Постквантовый KEx (sntrup761) включён по умолчанию |
| 9.9 | 2024 | Добавлена постквантовая поддержка ML-KEM |
| 10.0 | 2025 | DSA полностью удалён, ML-KEM по умолчанию |
macOS исторически отстаёт от этих выпусков на 6-12 месяцев, именно поэтому удаление DSA затрагивает пользователей macOS в начале 2026 года, хотя это было в OpenSSH 10.0 с апреля 2025 года.
Чего Ожидать Дальше
Основываясь на дорожной карте разработки OpenSSH:
- Подписи RSA SHA-1 (
ssh-rsa) скорее всего будут полностью удалены в OpenSSH 11.x - ECDSA с кривыми NIST может быть устарен в пользу Ed25519
- Постквантовые подписи (не только обмен ключами) будут добавлены
- Аутентификация на основе сертификатов будет всё активнее продвигаться вместо открытых ключей
Подготовьтесь сейчас:
- Обеспечив, чтобы все ваши ключи были Ed25519
- Перейдя на
rsa-sha2-256/512, если необходимо использовать RSA - Протестировав постквантовый обмен ключами с вашими серверами
- Оценив инфраструктуру SSH-сертификатов для вашей организации
Для получения дополнительных сведений об изменениях в более широком обновлении macOS Tahoe 26.3 смотрите наше руководство по выпуску macOS Tahoe 26.3.
Краткий Справочник: Необходимые Команды
Вот сводный справочник каждой команды, упомянутой в этом руководстве, организованный по задачам:
Диагностика
# Проверить версию SSH
ssh -V
# Тест подключения с подробным выводом
ssh -vvv user@host
# Проверить, какой бинарный файл SSH работает
which ssh
# Тест без файла конфигурации
ssh -F /dev/null user@host
# Проверить текущие типы ключей
for key in ~/.ssh/*.pub; do
echo "=== $key ==="
ssh-keygen -l -f "$key"
done
Генерация Ключей
# Сгенерировать ключ Ed25519 (рекомендуется)
ssh-keygen -t ed25519 -C "описание-ГГГГ" -f ~/.ssh/id_ed25519
# Сгенерировать ключ RSA (если Ed25519 не поддерживается целью)
ssh-keygen -t rsa -b 4096 -C "описание-ГГГГ" -f ~/.ssh/id_rsa
Развёртывание Ключей
# Развернуть ключ на удалённом сервере
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host
# Добавить ключ в macOS Keychain
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
Аудит Конфигурации
# Найти ссылки DSA в конфигурации
grep -n "ssh-dss" ~/.ssh/config /etc/ssh/ssh_config
# Найти все директивы User
grep -n "User " ~/.ssh/config
# Проверить синтаксис конфигурации
ssh -G test-host
# Исправить права доступа
chmod 700 ~/.ssh
chmod 600 ~/.ssh/config
chmod 400 ~/.ssh/id_*
chmod 644 ~/.ssh/*.pub
Очистка
# Удалить старый ключ хоста
ssh-keygen -R hostname
# Удалить все записи DSA из known_hosts
cp ~/.ssh/known_hosts ~/.ssh/known_hosts.bak
grep -v "ssh-dss" ~/.ssh/known_hosts > ~/.ssh/known_hosts.tmp
mv ~/.ssh/known_hosts.tmp ~/.ssh/known_hosts
Часто Задаваемые Вопросы
Могу ли я понизить версию OpenSSH на macOS Tahoe 26.3, чтобы восстановить поддержку DSA?
Вы не можете заменить системный бинарный файл OpenSSH на macOS из-за Защиты целостности системы (SIP). Однако вы можете установить более старую версию через Homebrew или скомпилировать из исходного кода в пользовательское местоположение. Системный ssh по адресу /usr/bin/ssh всегда будет версией OpenSSH 10.0, поставляемой с Tahoe 26.3. См. раздел «Обходные решения для устаревшей инфраструктуры» для подробных инструкций по сборке OpenSSH 9.7p1 из исходного кода.
Является ли изменение чувствительности к регистру постоянным или это ошибка?
Основываясь на примечаниях к выпуску OpenSSH 10.0 и направлении проекта, это выглядит как намеренное поведение, согласующееся со спецификацией протокола SSH (RFC 4252), которая определяет имена пользователей как чувствительные к регистру. Apple не прокомментировала, является ли это ошибкой, и нет признаков того, что это будет отменено. Вам следует воспринимать это как постоянное поведение и обновлять свои конфигурации соответственно.
Мои ключи RSA тоже перестанут работать?
Ключи RSA с подписями SHA-2 (rsa-sha2-256 и rsa-sha2-512) продолжают работать и будут поддерживаться в обозримом будущем. Однако ключи RSA с подписями SHA-1 (ssh-rsa) были отключены по умолчанию с OpenSSH 8.8 и скорее всего будут полностью удалены в будущей версии. Если вы используете ключи RSA, убедитесь, что они имеют не менее 3072 бит и что ваши серверы принимают подписи SHA-2. Для новых ключей Ed25519 является предпочтительным выбором.
Как исправить SSH-подключения с macOS на Windows Server?
Реализация OpenSSH на Windows Server исторически была нечувствительна к регистру для имён пользователей. После обновления macOS Tahoe 26.3 вам необходимо использовать точный регистр, который распознаёт Windows. Для доменных учётных записей используйте ДОМЕН\ИмяПользователя или имяпользователя@домен.com. Для локальных учётных записей проверьте имя учётной записи в Управлении компьютером. Обновите ~/.ssh/config соответственно:
Host windows-server
HostName win.example.com
User DOMAIN\\AdminUser
IdentityFile ~/.ssh/id_ed25519
Влияет ли это также на SFTP и SCP?
Да. Как sftp, так и scp используют ту же библиотеку SSH-клиента и подвергаются идентичному применению чувствительности к регистру и удалению DSA. Любые SFTP-клиенты (такие как Cyberduck, Transmit или FileZilla), использующие системный бинарный файл SSH, также будут затронуты. GUI-клиенты SFTP, включающие свою собственную библиотеку SSH (например, Cyberduck с собственной сборкой libssh2), могут не быть затронуты, но это зависит от конкретного приложения.
Заключение
macOS Tahoe 26.3 выпустил изменения SSH, которые нарушили устоявшиеся рабочие процессы без надлежащего предупреждения. Применение чувствительных к регистру имён пользователей, полное удаление DSA и предупреждения об обмене ключами с постквантовой защитой — каждое требует внимания, но все они просты в решении, если вы понимаете, что изменилось.
Немедленные действия:
- Проверьте
~/.ssh/configна несоответствие регистра в директивахUserи удалите все ссылкиssh-dss - Сгенерируйте ключи Ed25519 для замены оставшихся ключей DSA
- Разверните новые ключи на всех серверах в вашем инвентаре
- Обновите скрипты автоматизации и CI/CD-конвейеры с правильным регистром имён пользователей и путями к ключам
- Заглушите или разрешите предупреждения о постквантовой защите исходя из вашей позиции безопасности
Эти изменения, хотя и нарушающие привычный порядок, продвигают экосистему SSH macOS к более сильным значениям безопасности по умолчанию. Ed25519 быстрее, безопаснее и создаёт ключи меньшего размера, чем DSA. Чувствительные к регистру имена пользователей соответствуют спецификации протокола SSH. Постквантовый обмен ключами защищает от будущих угроз. Боль от миграции реальна, но улучшения безопасности существенны.
Если вы настраиваете новую среду разработки на macOS Tahoe, начните с нашего руководства по настройке разработчика macOS Tahoe, чтобы всё было настроено правильно с самого начала. Для более широкой конфигурации безопасности наше руководство по безопасности и конфиденциальности macOS Tahoe охватывает весь стек безопасности помимо SSH.
