Главная arrow Администрирование arrow Безопасность arrow OpenSSH для Windows Sunday, April 23 2017  
ГлавнаяКонтактыАдминистрированиеПрограммированиеСсылки
UK-flag-ico.png English Version
GERMAN-flag-ico.png Die deutsche Version
map.gif карта сайта
нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Поделиться:

OpenSSH для Windows Версия для печати
Написал microsin   
06.01.2008

Технология SSH (Secure Shell) позволяет защитить простые протоколы ftp, telnet, создавать защищенные туннели, перенаправление сетевых портов, что существенно расширяет набор инструментов системного администратора. OpenSSH (открытый безопасный shell) — набор программ, предоставляющих шифрование сеансов связи по компьютерным сетям с использованием протокола SSH. Он был создан под руководством Тэо де Раадта как открытая альтернатива проприетарного ПО от SSH Communications Security. Далее рассмотрена установка сервера и клиента OpenSSH на платформе Windows XP.

1. Скачиваем setupssh381-20040709.zip. Скачать можно http://sshwindows.sourceforge.net/.
2. Устанавливаем и подтверждаем умолчания во всех настройках. Установятся сервер и клиент SSH в нужное место (папка %ProgramFiles%\OpenSSH). После установки появится окно с предупреждением "Перед запуском службы OpenSSH вы ДОЛЖНЫ отредактировать файл %ProgramFiles%\OpenSSH\etc\passwd. Если вы не сделаете этого, то не сможете залогиниться через сервер SSH. Пожалуйста, прочитайте информацию в файлах readme.txt или quickstart.txt для правильной настройки файла passwd.".
3. Делаем все как написано в quickstart.txt. Запускаем cmd в папке %ProgramFiles%\OpenSSH, переходим в папку bin (Start -> Run... -> cmd -> cd %ProgramFiles%\OpenSSH -> cd bin).
4. Теперь нужно сделать group permissions file (файл разрешений для группы). Он может быть создан для локальных или доменных групп, для чего применяется команда mkgroup с ключом -l и -d соответственно. У меня был домашний комп, и никакого домена не было, поэтому я ввел просто:
mkgroup -l >> ..\etc\group  
   После этого в папке etc появится файл group.
5. Теперь нужно в passwd file (файл паролей) добавить пользователей - либо локальных, либо доменных, для чего применяется команда mkpasswd с ключом -l и -d соответственно. Я ввел
mkpasswd -l -u Administrator >> ..\etc\passwd
   Можно не указывать ключ -u и пользователя, тогда добавятся все пользователи, включая сервисные аккаунты и аккаунт Guest. Я ограничился пользователем Administrator. После этого в папке etc появится файл passwd.
6. Запускаем сервер OpenSSH командой net start opensshd, или с помощью консоли управления сервисами запускаем сервис по имени "OpenSSH Server". После этого приложением sshd.exe должен открыться TCP порт 22.
   На этом шаге у меня была проблема - сервис не хотел запускаться в системной ошибкой "System error 1067". Попробовал найти лог, он оказался в файле %ProgramFiles%\OpenSSH\var\log\OpenSSHd.log. Там было такое сообщение:
"5 [main] ? (1940) D:\Program Files\OpenSSH\usr\sbin\sshd.exe: *** fatal error - proc magic mismatch detected - 0xEFAED2A6/0x704D1F7E. This problem is probably due to using incompatible versions of the cygwin DLL. Search for cygwin1.dll using the Windows Start->Find/Search facility and delete all but the most recent version.  The most recent version *should* reside in x:\cygwin\bin, where 'x' is the drive on which you have installed the cygwin distribution.  Rebooting is also suggested if you are unable to find another cygwin DLL."
    По-русски эта галиматься значит, что не подходит версия файла cygwin1.dll. Попытался найти файл cygwin1.dll, он у меня оказался в нескольких местах:
c:\Program Files\hypertunnelNT\cygwin1.dll
c:\WinAVR\bin\cygwin1.dll
D:\Program Files\OpenSSH\bin\cygwin1.dll
    Самая свежая версия (1005.23.0.0) была у файла c:\WinAVR\bin\cygwin1.dll, а текущая версия файла D:\Program Files\OpenSSH\bin\cygwin1.dll была 1005.10.0.0. Попробовал для OpenSSH подменить cygwin1.dll на более новый, от WinAVR - и все заработало!
7. События успешного и неуспешного подключения клиентов пишутся в лог Application системы Windows. Записью в лог управляют ключи SyslogFacility и LogLevel в файле etc\sshd_config. Я у себя настроил эти опции так:
SyslogFacility AUTH
LogLevel VERBOSE
Поскольку хакерская активность в Интернете высока, журнал Application будет быстро заполняться, поэтому есть смысл увеличить размер лога Application (я увеличил до 5120 байт) и включить перезаписывание записей журнала по необходимости (Overwrite events as needed).

Теперь с сервером OpenSSH на Windows мы получаем следующие возможности:
- можно добраться до командной строки cmd, законнектившись под пользователем, прописанным в passwd (в моем примере Administrator). Текущий путь получаем, как прописано в переменной окружения %USERPROFILE% Windows. Под FreeBSD для этого можно воспользоваться клиентом ssh:
$ ssh Administrator@IP_или_имя_нашего_сервера_OpenSSH
- можно в Midnight Commander открыть с панели Shell Link, правда пользы от этого пока мало - у меня при подключении открылась папка bin в совсем неожиданном месте - c:\WinAVR\utils\bin\, и были доступны файлы только внутри неё.
- можно воспользоваться защищенным ftp-соединением (Secure FTP, или SFTP). Под FreeBSD для этого можно воспользоваться клиентом sftp:
$ sftp Administrator@IP_или_имя_нашего_сервера_OpenSSH 
  Как и в случае с cmd через утилиту ssh, текущий путь будет %USERPROFILE%, и будут доступны все файлы в текущей директории и в её подпапках. Можно подняться на уровень выше, в папку %SystemDrive%\Documents and Settings\.
  Если попытаться подняться еще на уровень выше, то попадем не как ожидалось на диск %SystemDrive%, а в папку %ProgramFiles%\OpenSSH. Эта папка считается корневой, и больше никуда выше попасть нельзя. Чтобы попасть обратно в папку %USERPROFILE%, нужно ввести cd /home/Administrator
- можно воспользоваться утилитой защищенного копирования scp. Например, под FreeBSD это будет выглядеть так:
$ scp backstore/080106archive.tar Administrator@IP_или_имя_нашего_сервера_OpenSSH:.
  Это означает - скопировать файл backstore/080106archive.tar в текущий каталог (.) пользователя Administrator (напомню, что это будет папка %USERPROFILE%). 
туннелирование сетевых соединений, иногда это называют "перенаправление портов через SSH-туннель".
  
Беспарольная аутентификация, основаная на public/private ключах
Как и в примерах с ssh, sftp, утилита scp запросит пароль пользователя Administrator. Чтобы не вводить пароль, например для копирования из bat-файла, нужно сгенерировать ключи и далее их использовать. Процесс по шагам (предполагается, что сервер установлен на Windows XP SP2, там есть пользователь Administrator, а клиент используется на FreeBSD, версия ядра 6.2-RELEASE-p8, там работаем под пользователем user, имя машины host.agava.net).
1. Генерируем ключи на клиенте (DSA, Digital Signature Algorithm):
$ cd ~    # переходим в домашний каталог пользователя user
$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_dsa): # тут просто нажимаем Enter
Enter passphrase (empty for no passphrase):     # тут просто нажимаем Enter, пароля нет
Enter same passphrase again:                           # тут просто нажимаем Enter, пароля нет
Your identification has been saved in /home/user/.ssh/id_dsa.
Your public key has been saved in /home/user/.ssh/id_dsa.pub.
The key fingerprint is:
hh:hh:hh:hh:hh:hh:hh:hh:hh:hh:hh:hh:hh:hh:hh:hh user@host.agava.net 
   Вместо hh будут HEX-цифры хеша ключа. Для генерации ключей требуется некоторое время (в зависимости от мощности машины, у меня на это ушло около 20 секунд). После этой операции в директории .ssh появятся 2 файла - id_dsa (приватный, секретный ключ, используется для расшифровки данных) и id_dsa.pub (публичный ключ, используется для шифрования данных).
2. Копируем файл id_dsa.pub с клиента на сервер, в папку пользователя Administrator, в подпапку .ssh (у меня был полный путь такой - d:\Documents and Settings\Administrator\.ssh\). Переименовываем id_dsa.pub в authorized_keys. Иногда может потребоваться использовать другое имя - authorized_keys2, за деталями обращайтесь к информации в файле %ProgramFiles%\OpenSSH\docs\key_authentication.txt.
3. Открываем в текстовом редакторе файл %ProgramFiles%\OpenSSH\sshd_config, меняем параметр StrictModes yes на StrictModes no (см. тот же файл key_authentication.txt, ключевое слово Fix StrictModes).
4. Перезапускаем сервер SSH:
net stop opensshd
net start opensshd
   Пробуем на клиенте команды scp, sftp, ssh (см. примеры выше) - под пользователем Administrator больше пароль не запрашивается!

B кaчecтвe yдoбнoгo (и бecплaтнoгo!) SSH-клиeнтa мoжнo иcпoльзoвaть putty. Eгo тoжe мoжнo иcпoльзoвaть для бeзпapoльнoй ayтeнтификaции пpи кoннeктe к SSH-cepвepy. Кaк нacтpoить, пpoцecc пo шaгaм (пpeдпoлaгaeтcя, чтo клиeнт putty paбoтaeт нa Windows XP, a cepвep SSH - нa FreeBSD, вepcия ядpa 6.2-RELEASE-p8, тaм paбoтaeм пoд пoльзoвaтeлeм user, имя мaшины host.agava.net):
1. Гeнepиpyeм ключи нa клиeнтe (DSA, Digital Signature Algorithm), для чeгo зaпycкaeм пpoгpaммy puttygen.exe. Oнa идeт в пoлнoм кoмплeктe putty, и ecли y Bac пoчeмy-тo eё нeт, тo мoжнo cкaчaть на сайте http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html, либо скомпилировать из исходников. После запуска puttygen.exe выбираем тип ключа (я выбрал SSH-2 DSA, хотя создатели putty настоятельно рекомендуют выбирать не DSA, а RSA), разрядность ключа (я оставил по умолчанию 1024), жмем кнопку Generate. Елозим мышкой по экрану - в этом процессе генерируется случайное число для ключа. Ключ сгенерируется. В поля "Key passphrase:" и "Confirm passphrase:" принципиально ничего не вводим, поскольку нам нужно от пароля избавиться. Жмем Save public key, сохраняем публичный ключ, жмем Save private key, сохраняем секретный ключ. Ключи лучше сохранить в потайное место (особенно секретный ключ), чтобы не достали враги =).
2. Теперь надо перетащить сгенерированный публичный ключ на сервер SSH. В программе puttygen.exe из окна "Public key for pasting into OpenSSH authorized  keys file:" копируем весь текст, создаем новый файл authorized_keys и этот текст вставляем туда, файл сохраняем на сервер SSH, в папку .ssh (эта папка должна находиться в корне домашнего каталога пользователя user на FreeBSD). Программу puttygen.exe закрываем, запускаем putty.exe.
3. Настраиваем сессию. Все как обычно - жмем правой кнопкой на верхней плашке окна putty, выбираем "New session...", с категории Session указываем IP или имя сервера FreeBSD, протокол SSH, в окне ввода "Saved Sessions" указываем произвольное имя сессии. Переходим в категорию Connection\Data, указываем в окне вввода "Auto-login username" имя пользователя, под которым будем логиниться. Переходим в категорию Connection\SSH\Auth, указываем секретный ключ для аутентификации - рядом с окном "Private key file for authentication:" жмем кнопу "Browse..." и выбираем файл секретного ключа, который был сгенерирован и записан на шаге 1. Снова переходим в категорию Session, жмем кнопку Save.
Готово! Теперь можно нажать кнопку Open, запустится сессия, и пароль вводить уже не надо.


Ссылки по теме:
http://microsin.ru/content/view/457/43/ - как поднять сервер SSH на FreeBSD. На этой системе сервер SSH работает намного быстрее и стабильнее.
Последнее обновление ( 07.01.2009 )
 

Комментарии  

  1. #5 MyName
    2010-10-2605:19:33 Все ок, спасибки автору. Вот только одна задача. Подскажите, как отключить логгирование? Чтобы в журнал событий/приложения ничего не писалось.

    microsin: такая фишка не предусмотрена, к сожалению.
  2. #4 Андрей
    2010-08-1813:10:52 А как сделать, так чтобы home директория у конкретного пользователя была своя? Т.е. при входе на sft пользователь попадал в одну директорию, а например второй пользователь в другую.
  3. #3 Ezichek
    2010-04-3016:39:24 А есть ли скриншоты как устанавливать OpenSSH

    microsin: нет, зато есть секретные скриншоты, как устанавливать Windows 98.
  4. #2 Сергей
    2009-09-1520:19:09 после выполнения всего Putty просто вылетает а WinSCP пишет:
    Cannot initialize SFTP protocol. Is the host running a SFTP server?

    в эвент логе на сервере:
    The description for Event ID ( 0 ) in Source ( sshd ) cannot be found. The local computer may not have the necessary registry information or message DLL files to display messages from a remote computer. You may be able to use the /AUXSOURCE= flag to retrieve this description; see Help and Support for details. The following information is part of the event: sshd : PID 6108 : fatal: setreuid 1024: Permission denied.

    microsin: к сожалению, похоже что разработчики сервера OpenSSH под Windows прекратили его поддержку. По крайней мере, новые версии не выходят, и баги не исправляются. Mail list по устранению проблем тоже закрыт, см. http://erdelynet.com/ssh-l/. Если Вам повезет, то в архивах сможете найти решение проблемы. Но лучше поставьте SSH на FreeBSD или Linux (можно это даже сделать на виртуальной машине из-под Windows). Есть также и другие продукты, предоставляющие сервис SSH под Windows (freeSSHd, copssh, WinSSHD и проч.).
  5. #1 viktor
    2008-11-1417:50:17 - да будем пробовать…штука интересная!

Добавить комментарий

:D:lol::-);-)8):-|:-*:oops::sad::cry::o:-?:-x:eek::zzz:P:roll::sigh:

Защитный код
Обновить

< Пред.   След. >

Top of Page
 
microsin © 2017