вівторок, 5 липня 2016 р.

Как поднять людский SSH сервер на Windows. | SSH server on Windows using openSSH

И даже не спрашивайте зачем :-) Особенно когда есть PowerShell.
Я правда все равно расскажу :)
OpenSource - это жесть для извращенцев. Есть такая клевая программа R, есть ее улучшенная и переработанная версия (в которой о боги, добавлена многопоточность вычислений!) от майкрософта MRO, но и она благодаря убогости основной кодобазы недалеко ушла.

R используется для статистического анализа данных и для предсказаний будущего. Кто не знает - я тружусь в области аналитики (Digital Analytics). Кто сомневается зачем - мудрый человек недавно сказал: "аналитика это новый апп девелопмент".
Для анализа эффекта ТВ рекламы понадобилось предсказать количество открытых веб-сессий (и сессий на мобильных) в следующие минуты сразу же после показа телевизионной рекламы основываясь на прошлых значениях. Алилуя, - для этих целей здесь есть человек с соответствующим образованием и PhD. Похожую задачу решает Гугл и даже выдал страждующим готовый модуль для R CausalImpact. Может он написан так, может R в принципе не может работать быстрее, может действительно алгоритмы тяжелые, но один проход алгоритма (time series на пару сотен значений) занимает примерно минуты 3..4. Таких проходов для того чтобы набрать статистически весомые данные нужно примерно 10 тыс. Любители математики умеющие быстро делить на 60 уже оценили масштаб.
Есстетсвенно, что очень хочется распараллелить и тут уже я сгодился. Относительно несложно было найти MRO и подключить "многоядерные библиотеки" (еханы бабай 2016ый год же!). Стало легче. Но чтоб совсем уж исправить ситуацию - "а почему бы не подключить распределенные вычисления" подумал я.
Быстрый гугл показал, что возможно. Два дня потраченных нервов убедил в справедливости народной мудрости: "в теории между теорией и практикой разницы нет. Но на практике - она есть".
К этому гребаному R невероятно мало документации и ее качество еще ниже, чем плинтус (уровень документации всяких тулзов на линуксы). Где-то в процессе, эксперементальным (!) путем удалось выяснить, что этот красава использует ssh для коннекта между сервером и клиентами. SSH удалось поставить и настроить, но без перекомпиляции R (чтобы исправить некоторые хардкоднутые значения командной строки) получить распределенные вычисления в вменяемое время не удалось. Сейчас проблему решаем дедовским методом: запуском нескольких копий R одновременно :) Ну и учим сейчас Azure Machine Learning & Google Cloud.

А теперь собственно по теме!

Как поставить OpenSSH сервер на Windows

И не превратиться в нервного и дергающегося админа из серии: ничего не трогай ничего не меняй.

Итак - берем openSSH. Для виндоуза нашелся добрый человек который поддерживает актуальным набор бинарников адаптированных для винды и даже сделал инсталлер. Все кроме картинки там цивильно и внушает доверие.
http://www.mls-software.com/opensshd.html
Устанавливайте последнюю версию смело.

Не забудьте установить сервер :)

Устанавливать нужно как SSHD_SERVER учетная запись. Пароль можно и сменить, но по умолчанию он D0ntGu3$$M3

Да, нам нужно разделение привилегий (или как это обозвали в русском вин сервере?)

Откройте 22 порт в файрволе. Можно и сменить порт, я пробовал - работает. И даже линуксовые машины заходят - проблем не заметил. Не знаю трактует ли внутренняя система безопасности винды порты до 1024 как какие-то особенные.

Теперь самое интересное. Нужно создать пользователя на машине. То есть ваш виндоуз сервер должен иметь пользователя с правильными правами. Прописать имя и сертификат в настройках ssh сервера не достаточно.
Парольная асентикация работает почти сразу мгновенно и вуаля супер полезный комманд промпт (привет линуксоидам от мс-доса) доступен. Можно даже запускать че-та.
Но кто ж сегодня паролями-то пользуется? Упомянутая выше программа R умеет логинится только с сертификатом и вот тут уже начинаются пляски.

Сам mls-software вот такую инструкцию дает как конфигурировать себя. http://www.mls-software.com/opensshd-pki.html
От себя добавлю, что $HOME это директория пользователя, который будет ломится на сервер, а не sshd эккаунта.

Ключи которые пользователи будут использоваться для логина я ложил в домашнюю директорию sshd_server учетной записи (%Users%\sshd_server\.ssh\) в файл authorized_keys в формате:
ssh-rsa <KEY> description
Часто description это идентификатор пользователя. Например имя его учетной записи. Да - ключи у меня сработали только ssh-rsa

В той же папке я создал файл environment (добавляющий переменные окружения - кто не в курсе, наберите в command prompt: set команду). По неизведанной для меня причине Temp (TMPDIR, TMP) переменная не была задана и программы пытающиеся ее использовать, как бы так правильно сказать - miserable fail.

Немає коментарів: