Передача файлов по частной сети (аутентификация на основе SSH-ключей)

Сегодня многие хостинг-провайдеры предлагают функции частной сети. Частная сеть создает второй сетевой интерфейс, недоступный в Интернете, который может использоваться для связи с другими серверами в рамках одного ЦОД. Частная сеть необходима, если вы хотите безопасно передавать данные между серверами или сократить использование исходящей полосы пропускания.

Данный мануал научит передавать файлы по частной сети на серверы с аутентификацией на основе SSH-ключей.

Примечание: Если на ваших серверах используется парольная аутентификация, читайте мануал Передача файлов по частной сети (парольная аутентификация).

Требования

1: Вход на серверы

Войдите на первый сервер (далее Server-01) с помощью терминала локальной машины:

ssh root@IP_of_Server-01

По запросу введите парольную фразу ключей, после чего вы получите доступ к командной строке:

Server-01$

Затем откройте второй терминал на локальной машине и запустите Server-02:

ssh root@IP_of_Server-02

Снова по запросу предоставьте парольную фразу.

Server-02$

Войдя на серверы, можно приступать к работе.

2: Создание ключей для серверов

Добавив ключи SSH, вы настроили на этих серверах аутентификацию на основе ключей из локальной среды. Также при этом отключается PasswordAuthentication (файл /etc/sshd/sshd_config):

. . .
# Change to no to disable tunnelled clear text passwords
PasswordAuthentication no
. . .

Это защищает серверы от взлома паролей, а также означает, что для прямого подключения с одного сервера на другой нужно создать и авторизовать ключи SSH.

Для этого нужно подключаться с Server-01 к Server-02. Начните с использования ssh-keygen для создания ключа RSA на Server-01.

ssh-keygen

В следующем диалоговом окне нужно нажать Enter три раза:

  1. Сначала нужно принять местоположение ключа по умолчанию.
  2. Затем нужно проигнорировать предложение создать парольную фразу (чтобы иметь возможность автоматизировать процесс rsync, тогда серверы смогут подключаться без вмешательства человека).
  3. В последнем окне нужно подтвердить, что вам не нужна парольная фраза.

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

Затем с помощью cat отобразите содержимое файла открытого ключа, id_rsa.pub:

cat ~/.ssh/id_rsa.pub
ssh-rsa EXAMPLEzaC1yc2EAAAADAQABAAABAQD7lpFBPqtQqCWFjDKCNhPLcfAi3musaXFgkzdHJ   3uO+9I/RZT662oSvyGp/yW2aOzduWYiv9ILgHH7vb/m5Y/iRvkBXr382x8ea4TCc3eD1fZ6DFF2  6ybsTTftK4zIaWfCeb8+K4CHCFngBpbSm/YWTTicff3PIli3gr6ZrYu13Csao/Y3KfHiUPjHXif+5wd  VYTD9j+WBpmYSX3mh7DS2KLdvMA+cTrQz7tpe06DwPDD5h1FDgtmHJGlsh07ohpUE1eYja  WxPYzGCtaDFJkP7DemR6UL/v5MP2yiFXV22ab/q5ud+7wnjnpxO+tE0Vk45MqJg/7KBVErBczd  lAwPT root@Server-01

Скопируйте открытый ключ в буфер обмена, а затем переключитесь на Server-02 и вставьте открытый ключ в файл authorized_keys.

Теперь Server-02 будет знать, что если сервер имеет соответствующий закрытый ключ, он может подключаться.

nano ~/.ssh/authorized_keys

Вставьте открытый ключ в новую строку:

EXAMPLEzaC1yc2EAAAADAQABAAABAQD7lpFBPqtQqCWFjDKCNhPLcfAi3musaXFgkzdHJ3uO+9I/RZT662oSvyGp/yW2aOzduWYiv9ILgHH7vb/m5Y/iRvkBXr382x8ea4TCc3eD1fZ6DFF26ybsTTftK4zIaWfCeb8+K4CHCFngBpbSm/YWTTicff3PIli3gr6ZrYu13Csao/Y3KfHiUPjHXif+5wdVYTD9j+WBpmYSX3mh7DS2KLdvMA+cTrQz7tpe06DwPDD5h1FDgtmHJGlsh07ohpUE1eYjaWxPYzGCtaDFJkP7DemR6UL/v5MP2yiFXV22ab/q5ud+7wnjnpxO+tE0Vk45MqJg/7KBVErBczdlAwPT root@Server-01

Сохраните и закройте файл. Затем убедитесь, что Server-01 может подключаться к Server-02.

3: Создание тестового файла

Вернитесь на сервер Server-1, а затем используйте команду echo, чтобы создать какой-нибудь контент и поместить его в файл test.txt:

echo "Private networking test" > ~/test.txt

Далее нужно передать этот файл на второй сервер с помощью Rsync.

Читайте также: Как копировать файлы при помощи Rsync через SSH

4: Передача файлов по частной сети

Когда команды, такие как ping или rsync, отправляются на внешний IP-адрес, трафик автоматически маршрутизирует по публичной сети. Однако если команды отправляются на внутренний IP-адрес в частной сети, трафик остается в этой частной сети.

Используйте rsync для передачи тестового файла, который вы создали только что, с Server-01 на Server-02 по частной сети. Для этого нужен внутренний IP-адрес Server-02.

Чтобы узнать внутренний IP-адрес второго сервера, воспользуйтесь панелью управления. Также для этого можно использовать команду ifconfig.

Скопируйте внутренний IP-адрес и вставьте его в команду:

rsync --verbose ~/test.txt  Server-02-private_ip:/tmp

Чтобы отправить команду, нажмите Enter. Поскольку вы не установили парольной фразы, передача файлов произойдет немедленно. Флаг —verbose выведет примерно такой результат:

sent 85 bytes  received 41 bytes  22.91 bytes/sec
total size is 24  speedup is 0.19

Примечание: Если вы все же установили парольную фразу, вам придется ввести ее, чтобы передать файл.

Как только передача файла будет завершена, войдите на второй сервер и убедитесь, что файл был передан.

5: Проверка данных на целевом сервере

Вы можете использовать команду cat, чтобы убедиться, что файл test.txt существует в каталоге /tmp:

cat /tmp/test.txt

Вы должны увидеть текст, который ввели в разделе 1.

Private networking test

Теперь вы убедились, что можете передавать данные по частной сети.

Заключение

Рекомендуем вам защитить новые серверы, следуя руководству по начальной настройке сервера.

Вы также можете настроить брандмауэр, чтобы заблокировать отдельные серверы и порты.

Чтобы узнать больше о SSH, читайте мануалы Основы шифрования и соединения SSH и Устранение неполадок SSH: как и когда искать ошибки?

Tags: ,