суббота, 15 января 2011 г.

SSH под Windows или как мы настроили защищенный удаленный рабочий стол. (Часть 2)

В прошлой статье мы установили SSH-сервер и сгенерировали пару ключей. Теперь же я просто покажу как можно подключиться к этому всему и как пробросить  RDP-порты.

Итак Putty мы уже установили, поэтому запустим его и приступим к настройке подключения. На вкладке Session:



Внесем IP-адрес нашего SSH-сервера и порт на котором он ждет подключения. Здесь же можно после окончания всех настроек сохранить сессию, чтобы конфигурировать все каждый раз.
Далее перейдем на закладку Windows->Translation:



Здесь мы вручную укажем кодировку СР866, потому что именно в ней нам будет выдавать консоль ОС Windows.
Перейдем на вкладку Connection->Data:


На данной вкладке укажем укажем логин пользователя, для того чтобы не вводить его каждый раз вручную. И перейдем на вкладку Connection->SSH->Auth:



Нажмем на ней кнопку Browse и укажем путь к приватному ключу. Теперь вернемся на вкладку Session и сохраним настройки под любым именем.
А теперь коннект! Смело жмем Open и если все правильно, то выскакивает окно сообщающие цифровую подпись ssh-сервера, нажмем здесь Yes (это нужно для того, чтобы в следующий раз ваш пк знал, что подключился к правильному серверу). Далее мы видим приглашение ввести кодовую фразу:


После ввода корректной фразы у вас откроется штатная консоль управления с правами System (так что осторожней). После того как мы все сделали пишем команду EXIT, для корретного закрытия сессии.
Ну вот коннектиться к шеллу удаленной машины мы можем, теперь самое вкусное - проброс портов!

Для этого все настройки оставляем как в первом случае только добавляется еще одна на вкладке Connection->SSH->Tunnels:



Тут в "Source port" мы пропишем любой свободный локальный порт нашего пк, например: 9999, а в Destination пропишем IP-адрес сервера внутри локальной сети (на который мы хотим пробросить RDP). Выставим флаги Local и IPv4. И сохранив конфигурацию нажмем Open и введем парольную фразу.

И что? - спросите вы- Перед нами опять системная консоль!
Да консоль та! - скажу я - Да сессия не та! :)

Консоль не закрываем! Открываем RDP-клиент (например тот что зовется "Удаленный рабочий стол") и коннектимся по адресу - localhost:9999



Жмем Подключить и...



видим стандартное окно логина, как будто мы с сервером в одной локальной сети :)
Все, устойчивых вам коннектов!

пятница, 14 января 2011 г.

SSH под Windows или как мы настроили защищенный удаленный рабочий стол. (Часть 1)

Как известно в ОС Windows никогда не было штатного SSH-сервера и очень зря, т.к. это очень полезная и интересная штучка. 
Secure SHell  — сетевой протокол сеансового уровня, позволяющий производить удалённое управление операционной системой и туннелирование TCP-соединений (например, для передачи файлов). Сходен по функциональности с протоколами Telnet и rlogin, но, в отличие от них, шифрует весь трафик, включая и передаваемые пароли. SSH допускает выбор различных алгоритмов шифрования.
Как раз на днях назрела проблема с удаленным доступом к внутренним серверам корпоративной сети и я решился убить время на установку SSH-сервера. Я перепробовал несколько вариантов бесплатных серверов (CopSSH, OpenSSH fo Windows, SSHD из Cygwin, KpyM SSH-ServerFreeSSHd). В силу подбора продукта под Windows, я искал простой в установке и функциональный сервер. По ряду причин таким оказался FreeSSHd.
В установке этого продукта нет ничего сложного, скачиваем дистрибутив с официального сайта и запускаем инсталляцию.
На запрос "Private keys should be created. Should I do it now?" (запрос на создание серверных RSA/DSA ключей) отвечаем да.
На запрос "Do you want run FreeSSHd as a system service?" (запрос на регистрацию FreeSSHd как системной службы) отвечаем по желанию. Если вам надо чтобы сервер запускался при старте компьютера без необходимости локального входа, то ставим да.
Далее идем Пуск->Программы->FreeSSHd->FreeSSHd либо вызываем его из системного трея. Появиться окно конфигурации, где мы перейдем на закладку SSH.


Здесь мы можем выбрать (описаны последовательно):
- на каком интерфейсе будет "висеть" сервер
- какой порт он будет "слушать"
- максимальное число подключений
- таймаут простоя сессии
- путь к файлу сообщения при  логине пользователя в систему
- путь до шелла пользователей (программа запускаемая при логине пользователя и обрабатывающая его команды)
- Флаг запуска SSH сервера при запуске службы freeSSHd
- Флаг "использование новой консоли", должен быть включен. Т.к. есть сообщения о подвисании сессии с опущенным флагом.
- Путь к RSA-ключу сервера
- Путь к DSA-ключу сервера.

Рекомендуется на данной вкладке настроить нестандартный порт,  дабы отсечь часть скриптов "little-хакеров".

Далее переходим на закладку Authentication:



Здесь мы можем изменить расположение папки публичных ключей (Public key folder), по умолчанию она указывает на папку программы, что мне не понравилось и я сменил его на подпапку с именем pub-keys.
Ну а самое главное тут можно глобально настроить методы аутентификации. Их два: парольная и публичным ключом. Каждый метод может находиться в состоянии: отключен (Disabled), разрешен (Allowed), запрашивается/обязательный (Required). На скриншоте выше показана конфигурация для аутентификации по ключу.

Далее перейдем на закладку Tunneling и разрешим использование туннелей (т.е. так называемый "проброс" портов одной машины на порты другой):



Ну и наконец нам осталось завести пользователя на сервере. Делается это на закладке Users:


Нажав на этой вкладке кнопку Add мы добавим пользователя. В появившемся окне пропишем логин, правила аутентификации, и права.
Тип аутентификации может быть:
- NT, применяем в случае использования Windows-пользователя. 
- парольная на хеше SHA-1, может быть использована в случае не желания использовать Windows-пользователей для входа.
- на публичных ключах, аналогична предыдущей. Только для входа используем ключ.

Права пользователя определяют флаги "User can use", это:
- использование шелла
- использование безопасного FTP
- использование туннелей

Ставим нужное (а для удаленного рабочего стола нам нужны права на туннели и возможно шелл, аутентификацию вберем по ключам) и нажимаем ОK->Применить->OK. После чего надо перезагрузить компьютер иначе аутентификация по ключам не будет работать (а будет выпадать ошибка "No supported authentication methods available").

Далее нам нужен SSH-клиент Pytty. Качаем пакет установщика, либо PuTTY + PuTTYgen.
Запускаем PuTTYgen:


В Parameters выставляем SSH-2 RSA и длину в 1024 бита, нажимаем Generate.


Далее активно водим мышкой по разным областям окна, т.к. на основе координат мыши генерируются случайные числа. По окончании генерации получим окно:


В этом окне в поле "Key comment" вводим имя пользователя, для которого создавали ключ (то имя которое регистрировали в FreeSSHd), это надо чтобы потом мучительно не вспоминать чей это ключ.
Далее выделаем весь текст в поле "Public key for pasting into OpenSSH..." и вставляем его в обычный текстовый файл одной строкой. Имя файла задаем обязательно совпадающее с именем пользователя FreeSSHd, а расширение (в данном случае TXT) убираем совсем. Все публичный ключ готов, но окно PuTTYgen рано закрывать.
Мы еще должны сохранить частный/приватный ключ. Для этого сначала введем кодовую фразу (любую, лишь бы запомнить) в поле "Key passphrase" и повторим ее в поле "Confirm passphrase"(это надо чтобы защитить ваш ключ, если он будет украден, то без этой фразы его применить будет нельзя). И нажмем "Save private key" сохранив под именем пользователя с расширением ppk.

Далее необходимо закачать публичный ключ на SSH-сервер, как мы помним что настраивали его на подпапку pub-key  в папке с программой. 

Все готово для коннекта. Подробности о коннекте и туннелировании RDP во второй части.