С демона по нитке

Andrushock

Xakep, номер #051, стр. 051-076-5


В алгоритме шифрования с открытым ключом для шифрации и дешифрации данных применяется асимметричная пара ключей, состоящая из публичного и приватного ключей. Первый из них используется для шифрования, и его можно свободно распространять среди абонентов даже по незащищенным каналам. Второй ключ, отвечающий за дешифровку, необходимо держать в секрете. В настоящее время одним из самых популярных алгоритмов шифрования открытым ключом является алгоритм RSA http://www.rsasecurity.com/, предложенный еще в 1977 году американскими учеными Ronald Rivest, Adi Shamir и Leonard Adleman.

Для работы по протоколу SSH версии 2 следует убедиться, что на сервере в файле sshd_config присутствуют следующие строки:

Protocol 2,1

PubkeyAuthentication yes

AuthorizedKeysFile .ssh/authorized_keys

А в ssh_config (на сервере), либо в файле ~/.ssh/config на клиентской машине имеются такие настройки:

Protocol 2,1

IdentityFile ~/.ssh/id_rsa

Теперь сгенерируем пару ключей RSA протокола SSH2 без указания парольной фразы:

$ ssh-keygen -t rsa -N '' -C 'Shell account' -f ~/.ssh/id_rsa

Скопируем полученный публичный ключ на удаленную систему:

$ scp ~/.ssh/id_rsa.pub my.shellbox.ru:~/.ssh/authorized_keys

Если файл authorized_keys уже существует, то просто добавим в него новый ключ:

$ scp ~/.ssh/id_rsa.pub my.shellbox.ru:~/

$ ssh my.shellbox.ru 'cat ~/id_rsa.pub >> ~/.ssh/authorized_keys'

С этого момента, для того, чтобы войти на my.shellbox.ru достаточно набрать:

$ ssh my.shellbox.ru

Работа с ключами DSA протокола SSH версии 2 полностью аналогична описанной выше схеме. Для использования ключей RSA протокола SSH1 необходимо убедиться, что обе стороны поддерживают RSA1 аутентификацию. На сервере:

Protocol 2,1

RSAAuthentication yes

На стороне клиента:

Protocol 2,1

RSAAuthentication yes

IdentityFile ~/.ssh/identity

Сгенерируем пару ключей:

$ ssh-keygen -t rsa1

Скопируем открытую часть из пары ключей на удаленную систему:

$ scp ~/.ssh/identity.pub my.shellbox.ru:~/.ssh/authorized_keys

Насильно заставим клиента ssh использовать первый протокол SSH:

$ ssh -1 my.shellbox.ru

Конечно, при использовании этого бесспорно удобного метода существует немалый риск, так как злоумышленник, получивший доступ к секретному ключу на клиентской машине, автоматически становится обладателем шелла на удаленной системе, где применяется публичный ключ из этой пары. Альтернативным и более безопасным способом беспарольной аутентификации является использование демона-посредника ssh-agent, предназначенного для хранения парольной фразы секретного ключа. Сгенерируем пару ключей RSA, введем и подтвердим парольную фразу:

$ ssh-keygen -t rsa

Запустим программу ssh-agent так, чтобы его процесс породил еще один командный интерпретатор, но уже с измененными переменными окружения:

$ eval `ssh-agent`

И добавим в базу защищенного агента наш приватный ключ:

$ ssh-add ~/.ssh/id_rsa

На этом настройка закончена. Теперь можно установить соединение с удаленным хостом, не вводя ни пароль пользователя, ни парольную фразу для пары ключей:

$ ssh my.shellbox.ru

Назад на стр. 051-076-4  Содержание  Вперед на стр. 051-076-6