Linux: sftp с авторизацией по RSA-ключу

Автор: | 01/30/2015
 

ssh_logoНа строне клиента  создаём директорию для хранения ключей:

$ mkdir ~/.ssh

Устанавливам права на чтение только владельцу:

$ chmod 700 .ssh/

Создаём пару private/public ключей:

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/setevoy/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/setevoy/.ssh/id_rsa.
Your public key has been saved in /home/setevoy/.ssh/id_rsa.pub.
The key fingerprint is:
8c:8f:68:eb:60:95:5a:c5:70:e5:f6:06:26:5b:c9:a2 setevoy@zeus.domain.com
The key's randomart image is:
+--[ RSA 2048]----+
|    . ...        |
|     + o .       |
|      = O        |
|     + X o       |
|    E o S o      |
|   + . o .       |
|  + o . .        |
| . o .           |
|   .o            |
+-----------------+

По сути — это один ключ, имеющий две части: id_rsa — это ваш private ключ, который никому не должен передаваться, а id_rsa.pub — его публичная часть, используемая удалённым сервером для вашей авторизаци.

Проверяем:

$ ls -l .ssh/
total 8
-rw-------. 1 setevoy setevoy 1675 Jan 29 12:06 id_rsa
-rw-r--r--. 1 setevoy setevoy  410 Jan 29 12:06 id_rsa.pub

Устанавливаем права только чтение на файл id_rsa.pub:

$ chmod 600 .ssh/id_rsa.pub

На стороне сервера, к которому мы будем подключаться создаём диреткорию .ssh и файл authorized_keys, в котором будет храниться public-часть ключа клиента:

$ mkdir .ssh/
$ chmod 700 .ssh/

На строне клиента копируем public-часть ключа (id_rsa.pub) на сервер в файл authorized_keys с помощью утилиты ssh-copy-id:

$ ssh-copy-id setevoy@10.***.***.239
setevoy@10.***.***.239's password:
Now try logging into the machine, with "ssh 'setevoy@10.***.***.239'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

Можно просто скопировать вручную содержимое файла .ssh/id_rsa.pub на стороне клиента, и добавить его в файл .ssh/authorized_keys на сервере, к которому будем подключаться.

Проверяем подключение:

$ ssh setevoy@10.***.***.239
Last login: Mon Mar 31 16:58:04 2014 from user.domain.com

SSH работает.

Проверяем sftp:

$ sftp setevoy@10.***.***.239
Connecting to 10.***.***.239...
sftp>

Авторизация работает.

Выходим по Ctrl+D.

Копируем файл с удалённого сервера на локальную машину:

$ sftp setevoy@10.***.***.239:testfile .
Connecting to 10.***.***.239...
Fetching /home/setevoy/testfile to ./testfile

Что бы загрузить локальный файл на удалённую машину:

$ sftp setevoy@10.***.***.239
Connecting to 10.***.***.239...
sftp> put testfile
Uploading testfile to /home/setevoy/testfile
testfile       100%    0     0.0KB/s   00:00