OpenSSH для Windows

5 декабря 2023

Традиционно в Windows были популярны SSH-клиенты, написанные специально для Windows — в первую очередь PuTTY и его клоны.

Хотя OpenSSH является стандартом де-факто в Linux/Unix, в Windows он почти не использовался по двум причинам.

Во-первых, консоль Windows несовместима ни с vt100, ни с его наследниками. Из-за этого в запускаемых из неё ssh-соединениях не работали клавиатурные комбинации, мышь, псевдографика, национальные кодировки, управление цветом, полноэкранный режим и т.д. — вместо этого на консоль выводился обильный мусор из служебных символов.

Все SSH-клиенты для Windows, обходившие эту проблему, обходили её одинаково — созданием собственного окна, отрисовкой внутри него текста в графическом режиме, собственной реализацией стандартного терминала — обычно xterm-совместимого, как наиболее распространённого. OpenSSH ничего перечисленного не имеет и для ввода-вывода полностью полагается на текстовую консоль, из которой он запущен.

Во-вторых, портирование приложений и библиотек из POSIX в Windows может вестись разными путями: либо относительно легко и быстро собрать с помощью CygWin, но потерять в производительности получившегося приложения, либо скрупулёзно пройтись по всему исходному коду и аккуратно заменить все платформенно-зависимые конструкции (fork-exec-wait на spawn и т.д.), ничего при этом не сломав.

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

В последнее время ситуация изменилась.

Во-первых, на смену Windows Console пришёл Windows Terminal. Заявляется, что в нём есть (или по крайней мере, обязана быть) поддержка xterm-256color, вкладок и многого другого, доступного пользователям других операционных систем ещё в прошлом тысячелетии.

Во-вторых, за портирование и сопровождение OpenSSH взялась сама Microsoft. Её вариант полностью адаптирован к особенностям окружения — например, ssh-agent является не обычным фоновым процессом, а полноценным системным сервисом, которым можно управлять через services.msc

Таким образом, теперь OpenSSH пригоден к использованию в Windows без прослоек вроде Cygwin или WSL, и именно реализация от Microsoft выглядит наиболее удобной. От заслуженно любимого PuTTY её выгодно отличают привычные имена и параметры команд, а также форматы файлов конфигурации и ключей.

Нами было замечено всего две ложки дёгтя.

Во-первых, сырость сборок, распространяемых в составе Windows. Поэтому в обязательном порядке скачивайте последнюю версию из https://github.com/PowerShell/Win32-OpenSSH/releases и вызывайте команды с указанием полного пути, либо добавьте "C:\Program files\OpenSSH" в переменную окружения PATH:

"C:\Program files\OpenSSH\ssh-add"
"C:\Program files\OpenSSH\ssh 1.2.3.4 -A"

Пометку "This is a beta-release (non-production ready)" можете игнорировать, она применима ко всей продукции Микрософта.

Проксирование TCP-порта с сервера на клиента, задаваемое ключом "-R", заработало у нас только после такого обновления.

Во-вторых, нам не получилось прокинуть на сервер SSH-ключ формата RSA. Если столкнётесь с такой же проблемой, используйте ключи ECDSA.

И да пребудет с вами сила Свободного ПО.



← Назад в Блог

Подпишитесь на новые статьи: