Технология SSH (Secure Shell) позволяет защитить простые протоколы ftp, telnet, создавать защищенные туннели, перенаправление сетевых портов, что существенно расширяет набор инструментов системного администратора. OpenSSH (открытый безопасный shell) — набор программ, предоставляющих шифрование сеансов связи по компьютерным сетям с использованием протокола SSH. Он был создан под руководством Тэо де Раадта как открытая альтернатива проприетарного ПО от SSH Communications Security. Далее рассмотрена установка сервера и клиента OpenSSH на платформе Windows XP.
1. Скачайте пакет сервера, это будет файл наподобие setupssh381-20040709.zip, распакуйте. Скачать можно по ссылке [1].
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-серверу. Как нacтpoить, пpoцecc пo шaгaм (пpeдпoлaгaeтcя, чтo клиeнт putty paбoтaeт нa Windows XP, a сервер 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. Сгенерируйте ключи нa клиeнтe (DSA, Digital Signature Algorithm), для чeгo зaпycтите п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ть на сайте [3], либо скомпилировать из исходников. После запуска 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, запустится сессия, и пароль вводить уже не надо.
[Ссылки]
1. OpenSSH site:sourceforge.net. 2. FreeBSD: настройка sshd - как поднять сервер SSH на FreeBSD. 3. PuTTY Download Page site:chiark.greenend.org.uk. |
Комментарии
microsin: такая фишка не предусмотрена, к сожалению.
microsin: нет, зато есть секретные скриншоты, как устанавливать Windows 98.
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 и проч.).
RSS лента комментариев этой записи