Задача: Разобрать, как установить OpenSSH сервис на Windows 7 с применением Cygwin.

Для справки: В данном примере используется Windows 7 с архитектурой x64

В данном случае это заметка, как напоминалка для следующих заметок испоУстановка Cygwin в систему Windows 7льзования особого инструмента целью которого является портирование утилит Linux систем на Windows в основе которых лежит динамическая библиотека без которой не было бы возможности запускать их. Пакет Cygwin обобщает различные инструменты разработки, прикладного обеспечения и их эквивалентные аналоги базовых программ. Если по простому, то привычные программы из Linux можно запускать в Windows получая в замен ту легкость и простоту создаваемых скриптов, а также совмещение использования консольных команд Windows редакций. Т.е. выигрыш на лицо, два в одном. Ниже я покажу, да и себе заметка на будущее,

  • Как установить в систему Windows пакет Cygwin
  • Как установить OpenSSH пакет
  • Как настроить аутентификацию по ключу против по паролю

Устанавливаю в систему пакет Cygwin, скачав необходимый по следующей ссылке: http://cygwin.com/setup-x86_64.exe

если используется архитектура x86, то ссылка на скачиваемый пакет:

http://cygwin.com/setup-x86.exe

На заметку: для установки в системе должны быть права Администратора, и у меня UAC Отключён.

Для справки:

В конечном этоге в этой заметке рассматривается как для двух систем установить и настроить безпарольный доступ друг к другу по ключам.

W7X86 – 192.168.1.59

W7X64 – 192.168.1.40

Запускаю установщик (версия 2.852 (64 bit)Далее Install from Internet, Далее – каталог установки оставляю по умолчанию: C:\cygwin64 и тип установки для всех пользователей: All Users (RECOMMENDED), Далее – следующим шагом оставляем путь предложенный установщиком где будет располагаться локальные пакеты: C:\Users\ekzorchik\Downloads, Далее – предопределяем тип используемого соединений, Direct Connection (в моем случае, соединение прямой, прокси сервер не используется), Далее – на следующем шаге выбираем сервер загрузки из множества (любой), к примеру: http://mirrorsru.goparts.com, Далее – на следующем шаге выбираем пакет(ы) которые нужны в системе нам, в моем случаем мне нужен пакет:

В текущем примере моей заметки — это пакет для организации безопасного подключения к системе посредством SSH, т. е. Пакет OpenSSH, как серверная так и клиентская часть.

Устанавливаем пакет OpenSSH через менеджер пакетов Cygwin

, Далее – в процессе установки мастер определит, какие зависимости сперва нужно до установить, соглашаемся, Далее – и начнется процесс скачивания зависимостей и самого приложений, просто ожидаем – после того, как установка пройдет успешно останется только проконтролировать, чтобы были поставлены галочки для создания ярлыков быстрого доступа к Cygwin:

  • Create icon on Desktop
  • Add icon to Start Menu

И нажать Готово.

На заметку: Если понадобится установить в эмулятор консоли еще какие либо утилиты, то данные шаги повторяются, запуск исполняемого файла, указания сайта с которого будем производить скачивание и установку утилит.

Далее запускаю терминал Cygwin:

Пуск – Все программы – CygwinCydwin64 Terminal, окно консоли примет вид:

Copying skeleton files.

These files are for the users to personalise their cygwin experience.

They will never be overwritten nor automatically updated.

‘./.bashrc’ -> ‘/home/1//.bashrc’

‘./.bash_profile’ -> ‘/home/1//.bash_profile’

‘./.inputrc’ -> ‘/home/1//.inputrc’

‘./.profile’ -> ‘/home/1//.profile’

ekzorchik@srv-w7x64 ~

$ <это_консоль_ввода>

В консоли после приглашения курсора $ набираем ssh-host-config –y этим мы генерируем ключи доступа к данной машине по ssh и создаем нового пользователя cyg_server где в качестве его пароля нужно указать текущий пароль от пользователя (в моем случае пользователь ekzorchik с дефолтный паролем 712mbddr@) под которым происходит инсталляция пакета cygwin и дополнительных пакетов в систему:

$ ssh-host-config -y

Часть информации выводимая в консоли отвечающая за создание нового пользователя cyg_server от имени которого будет происходит запуск инсталлированной службы «CYDWIN sshd»

*** Query: Please enter the password:712mbddr@

*** Query: Reenter:712mbddr@

Как видно, созданный пользователь инсталлирует службу в систему запуск которой будет осуществляться от имени данного пользователя (cyg_server), по умолчанию она становится не запущенной, запускаю:

Win + R -> cmd.exe

C:\Users\ekzorchik>sc config sshd start= auto

SC] ChangeServiceConfig: успех

C:\Users\ekzorchik>net start sshd

Служба “CYGWIN sshd” запускается.

Служба “CYGWIN sshd” успешно запущена.

Либо через запущенную терминальную консоль Cygwin Terminal:

  • -S, –start <svc_name> Starts a service named <svc_name>.
  • -E, –stop <svc_name> Stops a service named <svc_name>.

ekzorchik@srv-w7x64 ~

$ cygrunsrv.exe -E sshd

ekzorchik@srv-w7x64 ~

$ cygrunsrv.exe -S sshd

Также важно открыть доступ к системе по порту 22 (порт по дефолту). Для этого нужно добавить правило в брандмауэр для всех профилей системы:

netsh avdfirewall firewall add rull name=”SSH Server” dir=in protocol=tcp localport=22 action=allow

Проверим, открыт ли порт на котором работает служба SSH в системе:

C:\Users\ekzorchik>netstat -an | findstr :22

TCP 0.0.0.0:22 0.0.0.0:0 LISTENING

TCP [::]:22 [::]:0 LISTENING

Из вывода ясно, что порт открыт.

По такому же принципу шагов описанных выше устанавливаю и на другую систему с осью Windows 7 но применительно к архитектуре x86, хотя разницы в шагах вообщем-то никакой. Просто мне нужно для тестирования и показа, как это работает в дальнейшем.

Следующим шагом перехожу к тестированию подключения к системе посредством SSH соединения, в роли клиента на подключение к системе может использоваться, как консольный вариант — это через Cygwin Terminal, так и отдельным приложением,к примеру утилита — Putty. Я же буду использовать Cygwin Terminal.

ekzorchik@srv-w7x86 ~

$ hostname

srv-w7x86

ekzorchik@srv-w7x86 ~

$ ssh -l ekzorchik 192.168.1.40 -p 22

The authenticity of host ‘192.168.1.40 (192.168.1.40)’ can’t be established.

ECDSA key fingerprint is 57:8b:b2:35:43:f5:18:22:c0:e7:61:9b:44:d4:56:fe.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added ‘192.168.1.40’ (ECDSA) to the list of known hosts.

ekzorchik@192.168.1.40’s password:712mbddr@

ekzorchik@W7X64 ~ – подключение по SSH прошло успешно в другую систему.

$

Отлично, работает, теперь же надо сделать, чтобы авторизация шла только по ключам доступа.

Ниже практические шаги, как это сделать:

ekzorchik@W7X64 ~

$ mkdir -p ~/.ssh

Генерирую публичный и приватный ключ системы:

$ ssh-keygen -t dsa

Generating public/private dsa key pair.

Enter file in which to save the key (/home/ekzorchik/.ssh/id_dsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /home/ekzorchik/.ssh/id_dsa.

Your public key has been saved in /home/ekzorchik/.ssh/id_dsa.pub.

The key fingerprint is:

80:eb:01:02:af:a1:00:80:ad:63:38:53:87:50:59:3d ekzorchik@W7X64

The key’s randomart image is:

Далее копируем публичный(открытый ключ) на вторую систему:

ekzorchik@W7X64 ~

$ cat ~/.ssh/id_dsa.pub | ssh -p 22 ekzorchik@192.168.1.59 'umask 077;test -d .ssh | cat >> ~/.ssh/authorized_keys'

ekzorchik@192.168.1.59’s password:712mbddr@

Точно такие же шаги проделываем на второй системе по отношения к первой, но не забываем указать соответствующий IP адрес системы, в моем случае — это 192.168.1.40

ekzorchik@srv-w7x86 ~

$ cat ~/.ssh/id_dsa.pub | ssh -p 22 ekzorchik@192.168.1.40 'umask 077;test -d .ssh | mkdir .ssh ; cat >> .ssh/authorized_keys'

ekzorchik@192.168.1.40’s password:

mkdir: cannot create directory ‘.ssh’: File exists

ekzorchik@srv-w7x86 ~

$ cat ~/.ssh/id_dsa.pub | ssh -p 22 ekzorchik@192.168.1.40 'umask 077;test -d .ssh | cat >> .ssh/authorized_keys'

ekzorchik@srv-w7x86 ~

$ ssh -l ekzorchik 192.168.1.40 -p 22 Last login: Thu Nov 27 18:36:23 2014 from 192.168.1.59

ekzorchik@W7X64 ~

Но пока авторизация по ключам не заработает, в системах по умолчанию отключены все параметры настроек службы OpenSSH. Поэтому сперва произведу кое-какую настройку, в качестве редактора посредством которого буду изменять конфигурационные файлы выступит установленный по умолчанию — редактор vi: (советую познакомиться с его работой подробно, к примеру по моей заметке или по книгам посвященным Linux), но для быстро по первой настройке доустановлю пакет простого текстового редактора nano. Для этого снова запускаем setup-x86_64.exeшаги до установки пакета точно такие же которые я проделывал выше когда устанавливал OpenSSH. Ниже скриншот поиска и установки необходимого бинарного пакета, исходники пакета не требуются поэтому их и не отмечаю.

Устанавливаю пакет консольного редактора nano

Далее переходим к редактированию настроек сервиса SSHD:

ekzorchik@W7X64 ~

$ nano /etc/sshd_config

Port 22

Protocol 2

PubkeyAuthentication yes

AuthorizedKeysFile %h/.ssh/authorized_keys

PasswordAuthentication no

Сохраняем внесенные (Ctrl + O, Ctrl + X) изменения и перезапускаю службу для применения настроек.

ekzorchik@W7X64 ~

$ cygrunsrv.exe -E sshd

ekzorchik@W7X64 ~

$ cygrunsrv.exe -S sshd

Точно такие же действия проделываем и на другой системе.

Теперь пробует подключиться друг к другу посредством ключей, а не паролей:

Работает с 192.168.1.40 на 192.168.1.59

ekzorchik@W7X64 ~

$ !22

ssh ekzorchik@192.168.1.59 -p 22

Last login: Thu Nov 27 17:58:06 2014 from w7x64

ekzorchik@srv-w7x86 ~

Работает с 192.168.1.59 на 192.168.1.40

ekzorchik@srv-w7x86 ~

$ ssh -l ekzorchik 192.168.1.40 -p 22

Last login: Thu Nov 27 18:40:21 2014 from 192.168.1.59

ekzorchik@W7X64 ~

$

Отлично, все заработало, шаги один в один, как и на Ubuntu 12.04.5 Server/Desktop. Если же у Вас не заработает, то при подключении включите режим логирования, параметр v, либо проверьте что содержимое authorized_keys удаленной системы содержит id_dsa.pub ключ первой, возможно в этом проблема, вообщем вот так сразу сложно сказать в чем может быть проблема, если работает по паролю, а не работает по ключу, скорое всего не добавлен ключ на удаленную систему. Будьте внимательнее, но раз столкнувшись с проблемами и решив их Вы будете более подкованными в дальнейшем. Свой опыт лучше, чем подсказка более опытных, хотя и знаешь что сэкономишь время, но это как в школе, мало того что можно списать решение из книги содержащей пошаговое решение, пока сам не повторишь и не разберешь ни будешь знать в общем-то ничего. Вот так. На этом задачу считаю выполненной и смею прощаться. До встречи в следующих реальных заметках — с уважением автор блога — ekzorchik.

От ekzorchik

Всем хорошего дня, меня зовут Александр. Я под ником - ekzorchik, являюсь автором всех написанных, разобранных заметок. Большинство вещей с которыми мне приходиться разбираться, как на работе, так и дома выложены на моем блоге в виде пошаговых инструкции. По сути блог - это шпаргалка онлайн. Каждая новая работа где мне случалось работать вносила новые знания и нюансы работы и соответственно я расписываю как сделать/решить ту или иную задачу. Это очень помогает. Когда сам разбираешь задачу, стараешься ее приподнести в виде структурированной заметки чтобы было все наглядно и просто, то процесс усвоения идет в гору. Также прошу на https://win.ekzorchik.ru https://lin.ekzorchik.ru https://net.ekzorchik.ru https://voip.ekzorchik.ru https;//home.ekzorchik.ru