Задача: Разобрать, как установить OpenSSH сервис на Windows 7 с применением Cygwin.
Для справки: В данном примере используется Windows 7 с архитектурой x64
В данном случае это заметка, как напоминалка для следующих заметок использования особого инструмента целью которого является портирование утилит 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://mirrors–ru.go–parts.com, Далее – на следующем шаге выбираем пакет(ы) которые нужны в системе нам, в моем случаем мне нужен пакет:
В текущем примере моей заметки — это пакет для организации безопасного подключения к системе посредством SSH, т. е. Пакет OpenSSH, как серверная так и клиентская часть.
, Далее – в процессе установки мастер определит, какие зависимости сперва нужно до установить, соглашаемся, Далее – и начнется процесс скачивания зависимостей и самого приложений, просто ожидаем – после того, как установка пройдет успешно останется только проконтролировать, чтобы были поставлены галочки для создания ярлыков быстрого доступа к Cygwin:
- Create icon on Desktop
- Add icon to Start Menu
И нажать Готово.
На заметку: Если понадобится установить в эмулятор консоли еще какие либо утилиты, то данные шаги повторяются, запуск исполняемого файла, указания сайта с которого будем производить скачивание и установку утилит.
Далее запускаю терминал Cygwin:
Пуск – Все программы – Cygwin – Cydwin64 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. Ниже скриншот поиска и установки необходимого бинарного пакета, исходники пакета не требуются поэтому их и не отмечаю.
Далее переходим к редактированию настроек сервиса 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.