Входить на удалённый сервер по ssh каждый раз вводя пароль довольно утомительно. Или требуется автоматически копировать файлы через scp с одного сервера на другой.
Но SSH умеет авторизоваться с помощью rsa или dsa ключей. Рассмотрим только rsa.
Технология простая — сгенерили ключ, забросили на сервер к которому обычно ходим по паролю, подключились.
Прежде всего надо создать пару ключей.
ssh-keygen -t rsa
Enter file in which to save the key (/root/.ssh/id_rsa):
Путь для создаваемого ключа оставляем неизменным нажимая в ответ на запрос ENTER
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Если вы хотите что бы ваш ключ был дополнительно подтверждён паролем (произвольным), то задайте его в ответ на запрос passphrase. Если пароль для подтверждения не требуется, то просто нажмите ENTER. Ну и повторите соответственно.
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
3d:31:b2:4c:d7:32:95:e3:73:27:16:3b:a2:b8:6a:8c root@host
The key's randomart image is:
±-[ RSA 2048]----+
| ... |
| oo . |
| o *... o |
| o = =+ * .|
| S.o. = + |
| . ... |
| o . |
| E o . |
| ... |
±----------------+
После того, как ключи созданы, нам надо передать публичный ключ (в нашем случае id_rsa.pub) на удалённый сервер.
Сделать это можно с помощью команды:
ssh-copy-id -i ~/.ssh/id_rsa.pub remote-user@remote-host
Здесь следует быть внимательным и не отправить по ошибке на сервер приватный ключ (id_rsa) вместо публичного (id_rsa.pub).
Программа отрапортует о завершении
Now try logging into the machine, with «ssh remote-user@remote-host», and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
предложив зайти на на удалённый хост командой:
ssh remote-user@remote-host
Если всё прошло успешно, то пароль у Вас спрошен не будет. Иначе следует проверить .ssh/authorized_keys.
Так же авторизоваться с ключом не удастся, если Вы отправили не тот ключ. Удалите на удалённой машине ~/.ssh/authorized_keys и повторите засыл с помощью ssh-copy-id.
PS. Можно забросить ключ на другой сервер иначе
cat ~/.ssh/id_rsa.pub | ssh -l user localhost 'mkdir -p .ssh;touch .ssh/authorized_keys; cat >> .ssh/authorized_keys'
где, ssh_user это пользователь под которым хотим попадать на удаленный ssh_host