Git SSH «отказано в разрешении» в macOS 13 Ventura

Когда я пытаюсь пройти аутентификацию с помощью ключа RSA SSH в macOS 13 (Ventura), я получаюошибка. Однако когда я использую ту же команду в macOS 12 (Монтеррей), она работает правильно.

5 ответов

macOS 13 (Ventura) поставляется с OpenSSH_9.0p1. Согласно примечаниям к выпуску OpenSSH:

В этом выпуске по умолчанию отключены подписи RSA с использованием алгоритма хеширования SHA-1. Это изменение было внесено, поскольку алгоритм хеширования SHA-1 криптографически взломан, и можно создавать коллизии хэшей выбранного префикса за <50 тысяч долларов США [1]

Обходной путь описан в этой теме Reddit: SSH в Ventura.

Возможно, лучшим решением будет генерация ключей на основе более безопасного алгоритма хеширования. Пока я перехожу на ed25519, который можно сгенерировать так:

      ssh-keygen -t ed25519 -C "comment"

Пожалуйста, не добавляйте это вHost *! Это ужасная практика. Реальное решение — обновить удаленный сервер до версии выше OpenSSH 7.2. Если это не сработает, добавьте его для каждого IP-адреса хоста или в команде командной строки при подключении.

ИЕ -ssh -oPubkeyAcceptedAlgorithms=+ssh-rsa {user@host}

Вы можете проверить свои клиентские ключи и посмотреть, поддерживают ли они SHA256, и если да, то в данный момент новые ключи не нужны. Если там не написано SHA256, выбросьте эти ключи и получите что-нибудь понадежнее, используяssh-keygenкоманда.

ssh-keygen -l -f .ssh/id_rsa

Добавьте следующее в свой~/.ssh/configфайл

      HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa
KexAlgorithms +diffie-hellman-group1-sha1

из https://github.com/sshnet/SSH.NET/issues/1003

Многие ответы просто слепо предлагают новые параметры конфигурации, которые не нужны.

Чтобы решить эту проблему, вы можете запустить следующую команду.

      $ ssh-keygen -l -f ~/.ssh/id_rsa
3072 SHA256:/redacted /Users/myuser/.ssh/id_rsa.pub (RSA)

Затем вы можете взглянуть на поддерживаемые открытые ключи для вашей конфигурации ssh.

      $ ssh -Q PubkeyAcceptedAlgorithms
ssh-ed25519
ssh-ed25519-cert-v01@openssh.com
ssh-rsa
rsa-sha2-256
rsa-sha2-512
ssh-dss
ecdsa-sha2-nistp256
ecdsa-sha2-nistp384
ecdsa-sha2-nistp521
ssh-rsa-cert-v01@openssh.com
rsa-sha2-256-cert-v01@openssh.com
rsa-sha2-512-cert-v01@openssh.com
ssh-dss-cert-v01@openssh.com
ecdsa-sha2-nistp256-cert-v01@openssh.com
ecdsa-sha2-nistp384-cert-v01@openssh.com
ecdsa-sha2-nistp521-cert-v01@openssh.com

В большинстве случаев добавление ssh-rsa будет работать, или вы также можете ограничить его до rsa-sha2-256, используя следующее. Остальные настройки, которые публикуют люди, практически в любом случае не нужны, только следующая строка.

      Host *
    PubkeyAcceptedAlgorithms +ssh-rsa

Однако в случае, если вы используете сертификаты ssh, вам нужно будет запустить следующую команду для вашего сертификата.

      $ ssh-keygen -L -f ~/.ssh/id_rsa-cert.pub
/Users/myuser/.ssh/id_rsa-cert.pub:
        Type: ssh-rsa-cert-v01@openssh.com user certificate
        Public key: RSA-CERT SHA256:/redacted
        Signing CA: RSA SHA256:redacted (using rsa-sha2-256)
        Key ID: "something"
        Serial: 123
        Valid: from 2023-04-04T13:19:10 to 2023-04-05T09:19:40

В этом случае вам нужно будет добавить поле «Тип» в PubkeyAcceptedAlgorithms следующим образом.

      Host *
    PubkeyAcceptedAlgorithms +ssh-rsa-cert-v01@openssh.com

Для аутентификации PIV

Конечно, это отличается от проблемы ОП с ключами RSA.
После обновления до Ventura я получил следующую ошибку при использовании аутентификации ssh/PIV:

      Infinite reexec detected; aborting
banner exchange: Connection to UNKNOWN port 65535: Broken pipe

Исправление было:

  1. Удалите или закомментируйтеPKCS11Providerлиния в твоем~/.ssh/config
  2. Выполните следующие команды:
            ssh-add -e /usr/lib/ssh-keychain.dylib
      #Note - above command may produce the error:  
      #   'Could not remove card "/usr/lib/ssh-keychain.dylib": agent refused operation'
      #This can be ignored; the file simply has no items to remove
    ssh-add -D
    killall -9 ssh-agent
    ssh-add -s /usr/lib/ssh-keychain.dylib
    
  3. Теперь вы сможете использовать SSH

Примечание . Если ssh по-прежнему не работаетkillallдолжен был очистить все кэшированные процессы/ключи ssh/и т. д. Перезагрузка обязательно очистит все кэшированные данные, которые могут мешать.

Другие вопросы по тегам