Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #73, ЯНВАРЬ 2005 г.

Забавы с 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.

Назад на стр. 073-104-2  Содержание  Вперед на стр. 073-104-4