Генерируем пару ключей (секретный и публичный): % ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/andrushock/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/andrushock/.ssh/id_rsa. Your public key has been saved in /home/andrushock/.ssh/id_rsa.pub. The key fingerprint is: 25:95:5b:a6:d7:26:b6:f5:f9:a7:49:d4:a8:2a:0d:7d andrushock@midian Проверяем корректность прав доступа к директории .ssh и RSA-ключам: % ls -la .ssh | egrep -v 'total|\.\.' drwx------ 2 andrushock wsrc 512 Oct 19 20:42 ./ -rw------- 1 andrushock wsrc 1743 Jun 11 03:35 id_rsa -rw-r--r-- 1 andrushock wsrc 413 Jun 11 03:35 id_rsa.pub Добавляем публичный ключ в список авторизованных ключей на удаленной системе: % ssh user@host "cat >> .ssh/authorized_keys" < .ssh/id_rsa.pub В случае, если подкаталог .ssh и файл .ssh/authorized_keys на удаленной системе не существуют: % ssh user@host "mkdir -m 700 .ssh; umask 077; cat > .ssh/authorized_keys" < .ssh/id_rsa.pub Для сохранения парольных фраз к приватным ключам запускаем ssh-agent(1): % eval `/usr/bin/ssh-agent` Agent pid 3855 С помощью ssh-add(1) добавляем в память агента парольную фразу от нашего ключа: % ssh-add Enter passphrase for /home/andrushock/.ssh/id_rsa: Identity added: /home/andrushock/.ssh/id_rsa (/home/andrushock/.ssh/id_rsa) Для проверки просматриваем отпечаток секретного ключа: % ssh-add -l 2048 25:95:5b:a6:d7:26:b6:f5:f9:a7:49:d4:a8:2a:0d:7d /home/andrushock/.ssh/id_rsa (RSA) Выполняем вход на удаленный сервер без ввода пароля и парольной фразы: % ssh user@host OpenBSD 3.7-current (GENERIC) #1: Mon Aug 1 00:37:53 MSD 2005 Welcome to OpenBSD: The proactively secure Unix-like operating system. $ Пример использования функций оболочки для упрощения беспарольной аутентификации: % vi .profile ssh_agent_start() { id1=$HOME/.ssh/identity id2=$HOME/.ssh/id_dsa id3=$HOME/.ssh/id_rsa if [ ! "$SSH_AGENT_PID" ] && [ -f $id1 -o -f $id2 -o -f $id3 ]; then eval `/usr/bin/ssh-agent -s` /usr/bin/ssh-add < /dev/null export SSH_AGENT_SHELL=$$ fi } ssh_agent_stop() { if [ "$SSH_AGENT_PID" -a "$SSH_AGENT_SHELL"x = "$$"x ]; then /usr/bin/ssh-add -D < /dev/null eval `/usr/bin/ssh-agent -sk` fi } ssh_agent_start trap ssh_agent_stop 0 1 |