Переведите ключ PuTTY в OpenSSH

Перетащите сюда файл .ppk или вставьте его содержимое — и получите тот же ключ в формате, который читает OpenSSH: для ssh, scp, git и всего остального, что ищет ключи в ~/.ssh. Работает и в обратную сторону: дайте закрытый ключ OpenSSH, и страница запишет .ppk для PuTTY, версии 3 или 2.

Перевод идёт в этой вкладке, в WebAssembly, собранном из Rust-кода самого Conchshell, — тем же разбором ключей PuTTY, которым пользуется приложение. Страница загружает этот конвертер при открытии, до того как вы что-нибудь вставили, и после этого не делает ни одного запроса.

Ваш ключ

Только если она у ключа есть.

Во что перевести

Необязательно. Пусто — результат не зашифрован.

Ключ и его парольная фраза читаются и переводятся в этой вкладке. Единственные запросы страницы — за её собственным конвертером, одним скриптом и одним файлом WebAssembly, при открытии; других fetch, XMLHttpRequest и отправки формы в её коде нет, счётчиков на странице нет. Всё, что вы ввели, стирается, когда вы уходите со страницы.

Как пользоваться

  1. Перетащите .ppk на поле выше, выберите его кнопкой или вставьте текст. Строка под полем скажет, что найдено: формат, версия, зашифрован ли ключ и какого он типа.
  2. Если ключ зашифрован, введите его парольную фразу. Она нужна, чтобы расшифровать ключ в этой вкладке, и нигде не сохраняется.
  3. Проверьте направление. .ppk переводится в OpenSSH, а ключ OpenSSH — в .ppk версии 3, если не выбрать иначе.
  4. Если нужно, задайте новую парольную фразу для результата. Оставьте оба поля пустыми, чтобы получить незашифрованный ключ.
  5. Скачайте закрытый ключ и файл .pub. Для OpenSSH сохраните закрытый ключ как ~/.ssh/id_ed25519 (или id_rsa, id_ecdsa) и выполните для него chmod 600: OpenSSH не принимает закрытый ключ, который могут читать другие пользователи.

То же самое делает PuTTYgen на вашей машине, если он у вас есть (putty из Homebrew на macOS, putty-tools в Debian и Ubuntu):

puttygen key.ppk -O private-openssh-new -o ~/.ssh/id_ed25519
puttygen ~/.ssh/id_ed25519 -o key.ppk

В PuTTYgen под Windows это меню Conversions: загрузите ключ и выберите Export OpenSSH key (force new file format), а в обратную сторону — Import key.

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

Зачем вообще переводить .ppk?

OpenSSH — это команда ssh в macOS, Linux и современной Windows и всё, что на ней построено: git, scp, rsync, VS Code Remote-SSH, — читает только свои форматы ключей. Ключ, созданный в PuTTYgen, — это .ppk, так что при переходе в терминал его нужно один раз перевести. PuTTY и Pageant нужно обратное: они загружают только .ppk.

Чем форматы PPK и OpenSSH отличаются?

Ключ внутри тот же, различается упаковка. .ppk — текстовый файл с именованными заголовками, публичной и закрытой частями в base64 и MAC поверх обеих. Версия 2 превращает парольную фразу в ключ шифра через SHA-1; версия 3, появившаяся в PuTTY 0.75, — через Argon2, а MAC у неё на HMAC-SHA-256. Ключ OpenSSH — один блок base64, который начинается с BEGIN OPENSSH PRIVATE KEY; с парольной фразой OpenSSH выводит ключ через bcrypt-pbkdf и шифрует его AES-256-CTR, и эта страница шифрует так же.

Меняет ли перевод сам ключ?

Нет. Это та же пара ключей в другом файле: публичный ключ и его отпечаток SHA256 остаются прежними, поэтому серверы, у которых ключ уже лежит в authorized_keys, продолжают его принимать. Страница показывает отпечаток, чтобы его можно было сверить с ssh-keygen -lf или PuTTYgen.

Безопасно ли вставлять закрытый ключ в веб-страницу?

Только если страница никуда его не отправляет, и это должно проверяться, а не приниматься на веру. Здесь перевод идёт в вашем браузере: страница загружает конвертер при открытии, до того как вы что-нибудь вставили, и после этого не делает запросов, так что вкладку «Сеть» можно держать открытой всё время, пока переводите. Счётчиков на странице нет, а поля стираются, когда вы с неё уходите. Если не хотите отдавать закрытый ключ никакой веб-странице, команды puttygen выше делают то же самое на вашей машине.

Какие ключи поддерживаются?

PuTTY .ppk версий 2 и 3, зашифрованные и нет, в том числе с выводом ключа через Argon2id, Argon2i и Argon2d, и закрытые ключи OpenSSH в нынешнем формате, зашифрованные и нет. Типы ключей: Ed25519, RSA и ECDSA на P-256, P-384 и P-521. Страница отказывается от DSA, который OpenSSH убрал в версии 10.0; от Ed448, которого в OpenSSH нет; от аппаратных ключей (sk-), чья закрытая половина не покидает устройство; и от старых файлов PEM, начинающихся с BEGIN RSA PRIVATE KEY или BEGIN PRIVATE KEY.

Нужно ли переводить ключи для Conchshell?

Нет. Conchshell открывает файлы .ppk напрямую с версии 2.15 — версий 2 и 3, зашифрованные и нет — и читает их тем же разбором, который работает на этой странице. Эта страница — для остальных программ на вашей машине.

Как это проверено

На двух программах, которые и задают эти форматы. Каждый ключ, записанный страницей в формате OpenSSH, читает обратно ssh-keygen, и публичный ключ обязан совпасть с тем, что был в .ppk. Каждый записанный .ppk целиком загружает PuTTYgen 0.84 — с проверкой MAC и расшифровкой. Для незашифрованного ключа, а для зашифрованного — при той же соли и тех же настройках Argon2, .ppk на выходе совпадает с файлом PuTTYgen байт в байт.

Ключи для проверки — те же, на которых проверяется разбор PPK в самом Conchshell, плюс ключи от PuTTYgen и ssh-keygen всех поддерживаемых типов, с парольной фразой и без. По дороге проверка поймала одну настоящую ошибку: примерно у каждого четвёртого ключа P-521, созданного ssh-keygen, закрытое число записано короче полной длины, и библиотека на Rust, на которой всё построено, отвергала такие ключи как повреждённые. Страница это обходит.

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

Conchshell — клиент SSH, SFTP, FTPS и RDP для macOS, Windows, Linux и Android. Он сам читает ключи PuTTY, так что тот, кто переходит с Windows, может взять свой .ppk как есть и указать его в подключении. Разбор, который работает на этой странице, — этот самый код, собранный в WebAssembly.

Приложение бесплатно. Платная одна возможность — синхронизация сохранённых подключений между своими машинами, $19 разово.

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

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