Забавы с OpenSSH Anton Karpov Хакер, номер #073, стр. 073-104-3 client:~$ ssh toxa@myserver Access RESTRICTED. All you actions will be LOGGED Permission denied (publickey). Видим, что сервер отказал нам в попытке авторизации, распечатав поддерживаемые методы, несмотря на наличие у нас и на сервере пары ключей. Все дело в том, что по умолчанию ssh ищет ключи с определенным названием - identity для протокола SSHv1, id_rsa и id_dsa для протокола SSHv2, в чем нетрудно убедиться, взглянув на глобальный конфиг: # vi /etc/ssh/ssh_config #IdentityFile ~/.ssh/identity #IdentityFile ~/.ssh/id_rsa #IdentityFile ~/.ssh/id_dsa #Port 22 #Protocol 2,1 Но мы обозвали ключ myserver_rsa и потому при логине должны указать путь к нему: client:~$ ssh -i ~/.ssh/myserver_rsa toxa@myserver Access RESTRICTED. All you actions will be LOGGED Last login: Thu Nov 25 22:48:43 2004 from XX.XX.XXX.XX OpenBSD 3.6-stable (FREDDIE) #0: Mon Nov 8 07:00:47 MSK 2004 Welcome to OpenBSD: The proactively secure Unix-like operating system. server:~$ Если при генерации ключа ты не указал парольную фразу, а просто нажал <Enter> , то сервер пустит тебя без единого нажатия клавиши с твоей стороны. Это удобно, когда требуется автоматом что-либо отправить с машины на машину, например по вызову из crontab(5), ведь scp(1) (secure copy) как часть OpenSSH работает с ключами так же, как и ssh(1). Однако, чтобы достичь максимальной безопасности, секретный ключ стоит защитить парольной фразой. Это не замена паролю, ведь она ассоциирована с ключом, но стучать по клавиатуре все равно придется. Автоматизируем все! «А вот и не придется, - скажут некоторые, - если использовать ssh-agent(1)». И будут правы. Ssh-agent(1) - это утилита из базовой поставки OpenSSH, созданная для того, чтобы держать в памяти парольные фразы к ключам, дабы их не приходилось постоянно вводить с клавиатуры. Запускаем агент, считывая его вывод в переменные окружения текущего шелла: client:~$ eval `ssh-agent` Agent pid 86704 С помощью ssh-add(1) добавляем агенту фразу от нашего ключа: client:~$ ssh-add ~/.ssh/myserver_rsa Enter passphrase for /home/toxa/.ssh/myserver_rsa:<вводим и нажимаем Enter> Теперь на сервер нас пустят без запроса чего-либо, но не забудь, что секретный ключ все еще защищен парольной фразой. Утилита ssh-agent(1), несмотря на очевидные удобства, имеет определенные ограничения. Самое существенное - его действие не распространяется дальше текущего шелла. И если ты откроешь новое окошко терминала или зайдешь с другой физической консоли, тебе вновь потребуется запустить агент и импортировать фразу. Вот почему ни один ленивый параноик не обходится без чудо-утилиты под названием keychain от создателя Gentoo Linux Даниэля Роббинса. Работает keychain очень просто. После установки утилиты пропишем ее запуск в конфиг логина шелла. Заметь, не тот конфиг, который твой шелл считывает, будучи запущенный как интерактивная оболочка (например при запуске экземпляра xterm в иксах), а тот, который считывается при логине с консоли. Для bash это (в случае персональной настройки) ~/.bash_profile, для zsh - ~/.zlogin. |