putty и sshd: двухфакторная аутентификация Печать
Добавил(а) Гусев Александр   

Задача - cоздать возможность безопасного входа с системы Windows XP/w2k (используя комплект утилит сетевого администрирования putty) на удалённую *nix систему (например FreeBSD), где запущен sshd, с использованием двухфакторной аутентификации (т. е. посредством private\open ключей и парольной фразы). Сервер - хост FreeBSD, клиент – w2XP. Далее расписан процесс по шагам.

[На клиенте (Windows XP)]

1. Создаём закрытый (private) ключ, используя утилиту puttygen.exe с параметрами SSH2 RSA, bits key 1024:

putty-ssh01.JPG

2. При создании ключа по возможности вводим длиную и плохопредсказуемую парольную фразу. Записываем её на бумажке, чтобы не забыть (почти шутка =).

3. Сохраняем private key в формате putty *.ppk (по умолчанию). Этот ключ впоследствии будет использоваться ssh-клиентом putty.exe при подключении к серверу. Файл private-ключа должен лежать на файловой системе клиента в надежном месте, желательно в папке NTFS, куда заданы права доступа только для человека, непосредственно использующего ключ.

4. В окне программы puttygen.exe будет в текстовом виде отображен public rsa ключ, который будет перенесён на сервер. Перенос можно сделать по несекретному каналу (copy/paste в telnet, по email, в виде файла на флешке).

putty-ssh02.JPG

[На сервере (FreeBSD)]

5. Создаем пользователя в системе командой adduser (для примера – user2). Проверяем вход пользователя в систему локально (например, войдя в другую консоль). Пароль пользователя может быть любым, он никак не связан с секретной фразой, введенной на шаге 2.

6. Интегрируем public rsa key в профиль пользователя. Для начала проверяем наличие в "домашней директории" каталога .ssh, и если его нет, то создаём командой mkdir /home/user2/.ssh.

7. В папке .ssh создаем файл authorized_keys с содержимым открытого ключа, текст которого мы получили на шаге 4. Создать файл можно командой touch, либо просто переименовать тот файл, который мы пенесли с клиента на флешке (для примера). Весь текст ключа, вместе с заголовком протокола (в данном примере ssh-rsa), должен быть на одной текстовой строке (строка завершается символом конца строки, шестнадцатеричное значение 0x0A). В общем случае файл authorized_keys может содержать несколько публичных ключей, по одному на одной строке.

8. Активируем на сервере демон sshd. Для этого редактируем в файле /etc/rc.conf добавляем строку sshd_enable="YES".

9. Далее правим файл /etc/ssh/sshd_config. Настраиваем sshd на двухфакторную аутентификацию при входе. Добавляем следующие опции (строки):

#разрешить заходить по ssh только пользователю user2
AllowUsers user2

#аутентификация по "public key"
PubkeyAuthentication yes

#указываем местонахождение файла открытого ключа
AuthorizedKeysFile .ssh/authorized_keys

#отключение парольной аутентифакации при входе ssh,
# то есть включение только двухфакторной аутентификации
UsePAM no

10. Для надежности перезагружаем сервер. Настройка закончена.

В заключение привожу настройку клиента putty.exe на использование приватного ключа, полученного на шаге 3.

putty-ssh03.JPG

При коннекте сервер запросит секретную фразу, которую мы вводили на шаге 2:

putty-ssh04.JPG

[Ссылки]

1. Применение putty для Windows.
2. OpenSSH для Windows.
3. FreeBSD: настройка sshd.
4. pscp: как передавать файлы по протоколу ssh.