Иногда возникает задача быстро перекинуть файлы между двумя серверами, между которыми нет прямого SSH-доступа. Аутентификация не настроена, ключей нет, но при этом вы спокойно заходите по SSH на каждый из них со своей машины.
Самые очевидные варианты обычно такие:
1️⃣ Копировать через себя
Скачать данные с первого сервера локально, а потом залить их на второй. Работает всегда, но если у вас медленный канал или большой объем данных - вариант так себе. Иногда вместо себя используют промежуточный сервер с хорошим интернетом, но это тоже костыль.
2️⃣ Настроить SSH-доступ между серверами
Создать ключи, раскидать их, включить парольную аутентификацию и т.д. Иногда это избыточно, иногда просто запрещено политиками безопасности.
3️⃣ Более простой способ - проброс SSH-агента (ssh-agent forwarding). Никаких изменений на серверах, все делается со своей рабочей машины.
▪️ Запускаем ssh-agent. ssh-agent уже входит в состав SSH-клиента. Запускаем его и сразу подгружаем переменные окружения:
eval $(ssh-agent)
Проверяем, что агент работает:
env | grep SSH_
▪️ Добавляем ключи. Загружаем свои SSH-ключи в агент:
ssh-add
Проверить, какие ключи добавлены:
ssh-add -l
▪️ Разрешаем проброс агента. Теперь нужно явно разрешить проброс агента для нужных серверов. Делается это в ~/.ssh/config:
Host 1.2.3.4
ForwardAgent yes
Host srv-01
ForwardAgent yes
Важно: включайте ForwardAgent только для конкретных хостов, а не глобально.
▪️ Подключаемся и проверяем
ssh root@1.2.3.4
Если проброс работает, на сервере появится сокет агента:
ls /tmp | grep ssh-
▪️ Копируем файлы напрямую между серверами. Теперь магия. С первого сервера можно подключаться ко второму, используя ваш локальный ключ, даже если между серверами нет настроенной аутентификации:
rsync -av /var/www/ root@5.6.7.8:/var/www/
Файлы копируются напрямую с сервера на сервер, без скачивания к вам и без настройки SSH-доступа между ними.
▪️ Что важно помнить про безопасность
Когда вы заходите на сервер с включенным пробросом агента, пользователь root этого сервера получает доступ к вашему ssh-agent и может использовать его для подключений.
Поэтому:
не используйте agent forwarding на чужих или сомнительных серверах;
не включайте его глобально;
отключайте, когда он не нужен.
#ssh #rsync
🧑💻 NetworkAdmin