Попытка запуска rsync между двумя удаленными серверами посредством переадресации через обратный порт с помощью ключа ssh

Я пытаюсь запустить rsync между двумя серверами. Я основываю вещи на этом сообщении: как rsync файлы между двумя пультами?

То, что мне не хватает, заключается в том, как облегчить rsync (через ssh), когда для входа на каждый сервер требуется ключ (тот же ключ).

Вот ближайший у меня:

ssh -i ~/path/to/pem/file.pem -R localhost:50000:SERVER2:22 ubuntu@SERVER1 'rsync -e "ssh -p 50000" -vur /home/ubuntu/test localhost:/home/ubuntu/test' 

Похоже, что начальное соединение работает правильно, однако я не могу понять, как определить ключ и имя пользователя для SERVER2.

Есть предположения?

Я бы рекомендовал использовать ssh agent – таким образом вам нужна только одна пара ключей, где ваша частная часть хранится на вашей рабочей станции. Нет необходимости реплицировать его на других серверах (что плохое как таковое) или создавать другие пары ключей для определенных серверов.

Есть еще один способ начать работу с ssh-агентом, вы можете прочитать больше об этом. Вот простейший:

eval ($ssh-agent)

то вы добавляете свой ключ (ы) к агенту

ssh-add /path/to/private.key

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

Более того, вы можете продолжить ssh'ing с этого сервера на другой, и агент продолжит вашу аутентификацию до тех пор, пока опция AllowAgentForwarding для ssh-серверов на вашем пути установлена ​​в yes, что в основном используется по умолчанию.

Ну, это было предисловие 🙂

Теперь вернемся к вашему делу. Если переадресация портов не запрещена конфигурацией сервера, следующий подход:

  1. Убедитесь, что вы можете подключиться к SERVER2 с помощью агента –

ssh ubuntu@SERVER1 'echo Hi from $(hostname)'

  1. Проверьте работу агента по пересылке от SERVER1 до SERVER2

ssh -t ubuntu@SERVER1 ssh SERVER2 'Hi from $(hostname)'

  1. Начать соединение только с переадресацией портов

ssh -R localhost:50000:SERVER2:22 -Nv

и оставить это окно терминала открытым до сих пор.

  1. В новом окне терминала войдите в SERVER1 и оттуда проверьте, что порт перенаправлен в соответствии с запросом:

[SERVER1]ssh -p 50000 localhost 'echo Hi from $(hostname)'

вы должны увидеть Hi из SERVER2

Если все 4 шага выше работают для вас, вы сможете выполнить команду rsync – просто опустите -i part

Три этапа:

  1. Создайте ~/.ssh/config на SERVER1 со всеми необходимыми для подключения к SERVER2 , например:

     Host SERVER2 Port 50000 User user2 Hostname localhost IdentityFile ~/path/to/pem/file.pem 
  2. Попробуйте подключиться к SERVER2 без каких-либо аргументов (из SERVER1 после SERVER1 переадресации портов):

     ssh SERVER2 # works? 

    Если нет, добавьте -vvv и исследуйте, что пошло не так.

  3. Запустите команду rsync:

     ssh -i ~/path/to/pem/file.pem -R localhost:50000:SERVER2:22 ubuntu@SERVER1 \ 'rsync -vur /home/ubuntu/test SERVER2:/home/ubuntu/test' 

Обратите внимание: вам нужно иметь ключ аутентификации на SERVER1 , если вы хотите сделать это таким образом. Лучше создать новый ключ, чем копировать свой секретный ключ с вашего компьютера.