Пролистывая задачи на фриланс биржах наткнулся на такой вопрос — просьба поставить на Windows Server 2012 R2 сервис для безопасного подключения через SSH, т. к. на другом конце — сотрудник имевший в свою очередь практическое знакомство только с Linux серверами и ему консоль ближе. Данная тема также интересна, помнится мне что ранее я уже разбирал как поставить возможность подключения к Windows 7 через ssh, сейчас же разберу и для текущей задачи.
Итак есть установленная система из оригинального образа Windows Server 2012 R2 (English), имеется одна учетная запись Administrator с паролем 712mbddr@, некоторые действия будут браться из ранее опубликованной.
На момент написания данной заметки версия Cygwin — 2.876, а версия пакета openssh: – 7.3p1-2
Далее запускаю терминал cygwin:
Win +X — Command Prompt (Admin) -
C:\Cygwin\Cygwin.bat
Administrator@srv-ad ~
$
и мигает курсор ожидающий ввода команд
Генерируем ключи доступа (публичный и приватный):
$ ssh-host-config -y
*** Query: Please enter the password: 712mbddr@
*** Query: Reenter: 712mbddr@
$
Теперь переключаюсь через сочетание клавиш Alt + Tab во все еще открытое окно командной строки Windows и настраиваю правила для брандмауэра:
C:\Windows\system32>sc config sshd start= auto
C:\Windows\system32>net start sshd
C:\Windows\system32>netsh advfirewall firewall add rule name="SSH Server" dir=in protocol=tcp localport=22 action=allow
Ok.
C:\Windows\system32>netstat -an | findstr :22
TCP 0.0.0.0:22 0.0.0.0:0 LISTENING
TCP [::]:22 [::]:0 LISTENING
Отлично.
Если же нужно повесить сервис SSH на другой порт, то за редактирование следует обратиться к конфигурационному файлу который находится если через Alt +Tab переключиться в bash консоль или вызвать bat файл запускающий ее: C:\Cygwin\Cygwin.bat
(На заметку: работа с консольным редактором vi по аналогии, как и в Ubuntu)
$ vi /etc/sshd_config
Port 22
MaxAuthTries 6
MaxSessions 3
PasswordAuthentication yes
После нажимаю: Esc → :wq!
На заметку: вообще это честно говоря пародия на bash консоль, т. к. не с первого раза отрабатывает переключение в режим редактирования, да и странным образом ведут себя другие команды. А потому советую перед боевым редактированием сперва сделать резервную копию редактируемого файла.
,либо же не переключаюсь в консоль Cygwin, вызвать текстовый редактор notepad и отредактировать конфиг:
C:\Windows\system32>notepad c:\Cygwin\etc\sshd_config
вот только все форматирование хромает, да и при сохранении не удается сохранить файл без расширения.
Все же лучше поставить простой редактор nano. Для этого запускаем скачанный файл: setup-x86_64.exe, далее все как обычно указываем сервер и пакет: nano
$ nano /etc/sshd_config
Port 22
Protocol 2
MaxAuthTries 6
MaxSessions 3
PasswordAuthentication yes
После: Ctrl + O, Ctrl + X и все, чем проще тем лучше.
Теперь нужно перезапустить сервис sshd для активации изменений:
(Остановить сервис sshd)
$ cygrunsrv.exe -E sshd
(Запустить сервис sshd)
$ cygrunsrv.exe -S sshd
или по старинке:
$ net stop sshd
The CYGWIN sshd service is stopping.
The CYGWIN sshd service was stopped successfully.
$ net start sshd
The CYGWIN sshd service is starting.
The CYGWIN sshd service was started successfully.
И если было настроено правило в брандмауэре на 22 порт, то видоизменяем правило:
$ netsh advfirewall firewall show rule name=all | findstr "SSH"
Rule Name: SSH Server
$ netsh advfirewall firewall set rule name="SSH Server" new localport=22777
Updated 1 rule(s).
Ok.
Проверяем, что можно с Ubuntu 12.04.5 Desktop amd64 системы подключиться к Windows Server 2012 R2 через ssh:
aollo@system:~$ ssh -l Administrator 10.7.8.193 -p 22777
The authenticity of host ‘[10.7.8.193]:22777 ([10.7.8.193]:22777)’ can’t be established.
ECDSA key fingerprint is 42:4e:f6:93:5c:f4:39:bc:44:a7:68:e9:92:de:05:e7.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘[10.7.8.193]:22777’ (ECDSA) to the list of known hosts.
Administrator@10.7.8.193’s password:712mbddr@
Administrator@srv-ad ~
$
$ net stop Themes
The Themes service is stopping.
The Themes service was stopped successfully.
Итого подключение успешно прошло, а если нужно поставить какое либо ПО (пакет lynx) без необходимости запускать инсталлятор (GUI оболочку) то сделать это можно так:
$ cd c:/Users/Administrator/Downloads/
$ cygcheck.exe -p 'lynx' | grep lynx
Found 12 matches for lynx
lynx-debuginfo-2.8.7-2 – lynx-debuginfo: Debug info for lynx (installed binaries and support files)
lynx-2.8.7-2 – lynx: A text-based Web Browser (installed binaries and support files)
lynx-2.8.7-2-src – lynx: A text-based Web Browser (source code)
$ ./setup-x86_64.exe --root c:/Cygwin --no-desktop --no-shortcuts --no-startmenu --quiet-mode -q -P lynx
Starting cygwin install, version 2.876
User has backup/restore rights
Current Directory: c:/Cygwin
Could not open service McShield for query, start and stop. McAfee may not be installed, or we don’t have access.
root: c:\Cygwin system
Selected local directory: c:/Cygwin
net: Direct
site: http://cygwin.mirror.constant.com/
Downloaded c:/Cygwin/http%3a%2f%2fcygwin.mirror.constant.com%2f/x86_64/release/lynx/lynx-2.8.7-2.tar.bz2
Extracting from file://c:/Cygwin/http%3a%2f%2fcygwin.mirror.constant.com%2f/x86_64/release/lynx/lynx-2.8.7-2.tar.bz2
Changing gid back to original
running: c:\Cygwin\bin\dash.exe “/etc/postinstall/0p_000_autorebase.dash”
running: c:\Cygwin\bin\dash.exe “/etc/postinstall/0p_update-info-dir.dash”
running: c:\Cygwin\bin\bash.exe –norc –noprofile “/etc/postinstall/lynx.sh”
Changing gid to Administrators
Ending cygwin install
На заметку: также можно ставить несколько пакетов просто перечисляя их после ключа: -P tar,wget,lynx,unrar
Что еще, вроде как есть специальный пакет на подобии утилиты apt-get как в Ubuntu и с его помощью можно устанавливать пакеты привычным мне способом:
$ wget raw.github.com/transcode-open/apt-cyg/master/apt-cyg
$ chmod +x apt-cyg
$ mv apt-cyg c:/Cygwin/bin/
$ apt-cyg install curl
Installing curl
–2016-09-19 11:45:49– http://cygwin.mirror.constant.com//x86_64/release/curl/curl-7.50.3-1.tar.xz
Resolving cygwin.mirror.constant.com (cygwin.mirror.constant.com)… 108.61.5.83
Connecting to cygwin.mirror.constant.com (cygwin.mirror.constant.com)|108.61.5.83|:80… connected.
HTTP request sent, awaiting response… 200 OK
Length: 289508 (283K) [application/octet-stream]
Saving to: ‘curl-7.50.3-1.tar.xz’
и далее, весь вывод установки приводить здесь не имеет смысла главное его конечная цель — пакет установлен.
Ладно что-то я отклонился от темы данной заметки, но все равно любой представленный материал у меня на блоге полезен. Так хоть и не совсем тривиальной был разбор как же все-таки установить openssh сервер на Windows Server 2012 R2 с упором на командную строку, с GUI же конечно же было бы проще, но нужно всегда заходить к решению проблемы с того, чего может не оказаться под рукой. А с помощью этой заметки я показал, как все же сделать. Итого, заметка функциональна и практична, на этом я прощаюсь, с уважением автор блога — ekzorchik.