Забавы с OpenSSH Anton Karpov Хакер, номер #073, стр. 073-104-2 Можно, конечно, ограничить доступ по ssh с определенных адресов, но если подобное ограничение неприемлемо (кто знает, где я окажусь завтра?), можно воспользоваться авторизацией по ключам. Авторизация по ключам обладает следующими основными преимуществами: 1. Позволяет аутентифицироваться на удаленном хосте по ssh без ввода пароля. Например, очень часто ssh используют в скриптах автоматического резервирования системных и пользовательских файлов, которые себе дороже передавать по сети в открытом виде. Разумеется, эти скрипты запускаются автономно и не должны требовать вмешательства админа для введения пароля. Да и вообще, по сто раз на дню вбивать пароли - то еще удовольствие. 2. Позволяет избежать возможности отслеживания вводимого пароля кейлоггерами в случае, когда ты логинишься в свою систему с недоверенной машины (или просто тебя хакнули ;). Для работы потребуются два ключа: публичный и секретный (приватный). Генерирует их утилита ssh-keygen(1). Протокол SSHv1 позволяет использовать только rsa-ключи, тогда как в SSHv2 доступны алгоритмы rsa и dsa. Честно говоря, с практической точки зрения нет большой разницы в том, какой алгоритм ассиметричного шифрования, RSA или DSA, использовать, однако существует мнение, что rsa работает побыстрее и, как утверждает одна моя знакомая любительница криптографии, более стоек к взлому. На локальной машине (клиенте) сгенерируем rsa-ключ длиной в 2048 бит и сохраним его в файле ~./ssh/myserver_rsa: client:~$ ssh-keygen -t rsa -b 2048 -f .ssh/myserver_rsa Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in .ssh/myserver_rsa. Your public key has been saved in .ssh/myserver_rsa.pub. The key fingerprint is: a6:1d:4a:98:7f:4a:93:aa:38:d6:4f:b5:2b:39:6c:64 toxa@laptoxa.toxa.lan В результате мы получили пару ключей: секретный (myserver_rsa) и связанный с ним публичный (myserver_rsa.pub). Обрати внимание на права доступа: client:~$ ls -l .ssh/puffyhost_rsa* -rw------- 1 toxa 1743 2004-10-02 13:14 .ssh/myserver_rsa -rw-r--r-- 1 toxa 403 2004-10-02 13:14 .ssh/myserver_rsa.pub Теперь нам нужно переправить публичный ключ на сервер - ту машину, на которую мы планируем логиниться по ключам. Так как ключ публичный, можно смело выполнять копирование по незащищенному каналу. Секретный же ключ никуда дальше нашего хоста не уходит. Переправив myserver_rsa.pub на сервер, его следует добавить в список авторизованных ключей. Для протокола SSHv2 таковым по умолчанию является $HOME/.ssh/authorized_keys: server:~$ cat myserver_rsa.pub > > ~/.ssh/authorized_keys Наконец, на сервере должна быть поддержка авторизации по ключам. Для SSHv2 ей соответствует строчка «PubkeyAuthentication yes» в /etc/ssh/sshd_config. Если требуется параноидальная безопасность, авторизацию по системному паролю можно теперь отключить («PasswordAuthentication no») в том же конфиге. В моем примере я так и сделал. Теперь пробуем зайти на сервер: |