SSH keys (Русский)

From ArchWiki
Revision as of 18:28, 16 March 2007 by Cheer (talk | contribs) (→‎...path b continues...: translated)
Jump to navigation Jump to search


Template:I18n links start Template:I18n entry Template:I18n entry Template:I18n links end

Tango-preferences-desktop-locale.pngThis article or section needs to be translated.Tango-preferences-desktop-locale.png

Notes: please use the first argument of the template to provide more detailed indications. (Discuss in Talk:SSH keys (Русский)#)

Использование SSH ключей для подключения к серверу

Зачем использовать эти ключи?

Использование ssh ключей, a public and a private key to be precise, is an easy way to connect to a server/a whole bunch of servers, using the same password OR using no password at all. You should prefer the password/ssh-agent combination!

Первый шаг - генерирование ключей

mith@middleearth||[[~]]:~ > ssh-keygen -b 2048 -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/mith/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/mith/.ssh/id_dsa.
Your public key has been saved in /home/mith/.ssh/id_dsa.pub.
The key fingerprint is:
x6:68:xx:93:98:8x:87:95:7x:2x:4x:x9:81:xx:56:94 mith@middleearth
mith@middleearth||[[~]]:~ >


Что было сделано? Была сгенерирована пара ключей public/private dsa (-t dsa) длиной 2048 bit (-b 2048) с помощью команды ssh-keygen. Вы также можете создать rsa ключ (-t rsa). Вы можете изменять параметр длины битов (по умолчанию она равна 1024).
Если вам не нравится имя ключа по умолчанию, вы можете указать имя, используя параметр -f name.
В процессе вам было предложено выбрать место сохранения для ключей. Был избран стандартный путь. Потом вас спросят о фразе-пароле.
Есть два пути, которые вы можете выбрать:
a) короткий, но небезопасный путь: не использовать фразу-пароль, иметь лёгкий доступ до удалённого сервера, бояться кражи ключа
b) более длинный, менее удобный, но безопасный путь: использовать фразу-пароль, использовать ssh-agent и чувствовать себя в безопасности.

шаг 2: копирование ключа на удалённый сервер {одинаково для A и B}

mith@middleearth||[[~]]:~ > scp .ssh/id_dsa.pub mith@metawire.org:


Скопируйте public ключ (id_dsa.pub) на ваш удалённый сервер с помощью scp (обратите внимание на : (двоеточие) в конце адреса сервера. Таким образом файл окажется в домашнем каталоге на сервере, но вы можете указать другой путь, если хотите.

шаг 3 - вход на удалённый компьютер и выкладывание своего ключа в нужном месте {одинаково для A и B}

mith@middleearth||[[~]]:~ > ssh metawire.org
mith@metawire.org's password:
-bash-2.05b$ mkdir .ssh/
-bash-2.05b$ cat id_dsa.pub >> .ssh/authorized_keys
-bash-2.05b$ rm id_dsa.pub
-bash-2.05b$ chmod 700 .ssh
-bash-2.05b$ chmod 600 .ssh/authorized_keys


Мы подключаемся к удалённому серверу и используем команду cat для добавления содержимого id_dsa.pub в authorized_keys, который находится в скрытой директории .ssh. Обратите внимание: Если вы получаете сообщение об ошибке, связанное с тем, что директрия .ssh не существует, просто создайте её с помощью (mkdir .ssh).
После этого мы удаляем публичный ключ (rm id_dsa.pub) и выставляем правильные права на .ssh и authorized_keys.
После этого следует выйти из системы и войти снова. В зависимости от того пути, который вы выбрали, вас спросят или не спросят о секретной фразе. Путь A здесь кончается

...продолжение пути B...

Теперь о том, что делает этот путь практически таким же простым, как и путь без секретной фразы. Это ssh-agent.. Он просто спрашивает у вас один раз каждую сессию секретную фразу вашего приватного ключа и каждый раз, когда вам нужно будет его ввести, ssh-agent сделает это за вас. ssh-agent включен в пакет openssh, поэтому беспокоиться об этом не стоит...

mith@middleearth||[[~]]:~ > ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-vEGjCM2147/agent.2147; export SSH_AUTH_SOCK;
SSH_AGENT_PID=2148; export SSH_AGENT_PID;
echo Agent pid 2148;


Когда вы запускаете ssh-agent, он выведет на экран, какие переменные окружения он будет использовать. Well to make ssh-agent use these variables run

mith@middleearth||[[~]]:~ > eval `ssh-agent`
Agent pid 2157

ID процесса, конечно, может отличаться от вашего. Добавление eval `ssh-agent` в ваш файл .bashrc - возможный вариант, чтобы команда запускалась каждый раз, когда вы запускаете новый shell
Итак, теперь ssh-agent запущен, осталось сообщить ему, что имеется приватный ключ и место его расположения.

mith@middleearth||[[~]]:~ > ssh-add .ssh/id_dsa
Enter passphrase for .ssh/id_dsa:
Identity added: .ssh/id_dsa (.ssh/id_dsa)


При вопросе о секретной фразе, просто введите её. Теперь вы можете залогиниться на удалённую машину без нужды вводить ваш пароль, а ваш приватный ключ находится под паролем. Неплохо, ага? Единственный минус этого подхода - то, что вам придётся создавать новый процесс ssh-agent для каждой открытой консоли (оболочки), поэтому вам придётся каждый раз запускать ssh-add в новой оболочке. Есть обходной путь для этой проблемы, использующий программу (скорее, скрипт), который называется keychain, он будет, возможно, описан в следующей секции {...работа продолжается}.

Using keychain

Keychain manages one or more specified private keys. Once started it will ask your for the passphrase for that/each private key and stores it. That way your private key is password protected but you won't have to enter your password over and over again.

Get the package and install it.
Edit your ~/.bashrc and add the following lines:

/usr/bin/keychain ~/.ssh/id_dsa
[[ -f $HOME/.keychain/$HOSTNAME-sh ]] && source $HOME/.keychain/$HOSTNAME-sh

I am aware that not everyone is using bash. Run keychain --help and it will tell you how to set it up for other shells.
Close your shell and open it again. Keychain should come up and if it's your first run it will ask your for the passphrase of the specified private key.

Полезные ссылки и дополнительная информация