Переведите ключ PuTTY в OpenSSH
Перетащите сюда файл .ppk или вставьте его содержимое — и получите тот же ключ в формате, который читает OpenSSH: для ssh, scp, git и всего остального, что ищет ключи в ~/.ssh. Работает и в обратную сторону: дайте закрытый ключ OpenSSH, и страница запишет .ppk для PuTTY, версии 3 или 2.
Перевод идёт в этой вкладке, в WebAssembly, собранном из Rust-кода самого Conchshell, — тем же разбором ключей PuTTY, которым пользуется приложение. Страница загружает этот конвертер при открытии, до того как вы что-нибудь вставили, и после этого не делает ни одного запроса.
Ваш ключ
Только если она у ключа есть.
Необязательно. Пусто — результат не зашифрован.
Ключ и его парольная фраза читаются и переводятся в этой вкладке. Единственные запросы страницы — за её собственным конвертером, одним скриптом и одним файлом WebAssembly, при открытии; других fetch, XMLHttpRequest и отправки формы в её коде нет, счётчиков на странице нет. Всё, что вы ввели, стирается, когда вы уходите со страницы.
Результат
Закрытый ключ
Скопировано.
Публичный ключ
Скопировано.
- Отпечаток
Тот же отпечаток SHA256, что показывают ssh-keygen -lf и PuTTYgen: перевод ключ не меняет.
Как пользоваться
- Перетащите
.ppkна поле выше, выберите его кнопкой или вставьте текст. Строка под полем скажет, что найдено: формат, версия, зашифрован ли ключ и какого он типа. - Если ключ зашифрован, введите его парольную фразу. Она нужна, чтобы расшифровать ключ в этой вкладке, и нигде не сохраняется.
- Проверьте направление.
.ppkпереводится в OpenSSH, а ключ OpenSSH — в.ppkверсии 3, если не выбрать иначе. - Если нужно, задайте новую парольную фразу для результата. Оставьте оба поля пустыми, чтобы получить незашифрованный ключ.
- Скачайте закрытый ключ и файл
.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 разово.
Что почитать дальше
- Проверка публичного SSH-ключа — тип, настоящая длина и отпечаток, с оценкой
- Проверка ~/.ssh/config — шифры, MAC, обмен ключами и проверка ключа хоста
- PuTTY против Conchshell — что переезжает, а что остаётся
- Все инструменты
- Загрузка