Назад | Перейти на главную страницу

Передача файла с удаленного сервера A на удаленный сервер B с сервера C

У меня есть интересная проблема, которую я пытаюсь решить. У меня есть сервер JumpBox, который у меня есть для безопасного подключения ssh к серверам клиента. Это единственный сервер, на котором мои клиенты открывали порт 22. Однако этот сервер JumpBox очень мал, и ему не хватает места для хранения больших файлов (более 5 ГБ).

Итак, я установил для этой цели еще один сервер с дисками большего размера, но я не хочу, чтобы клиенты открывали порт 22 для еще одного IP-адреса.

Сервер T = Transferbox

Сервер J = Jumpbox

Сервер C = Clientbox

Могу ли я передать файл с сервера J на ​​сервер C?

Спасибо, дайте мне знать, если мне нужно что-то уточнить

От «T» вы должны открыть туннель ssh на «J», который пересылает его в SSH на «C». Оттуда вы можете перейти через J из T, чтобы делать что-либо на C через SSH. Видеть SSH-туннелирование стало проще Чтобы получить больше информации

Итак, со своего Т-сервера вы можете сделать что-то вроде этого:

ssh -f J-user@addr-of-J-server -L 2000:addr-of-C-server:22 -N

ssh C-user@localhost -p 2000

На хосте, где вам нужны данные, просто откройте порт, скажем, 22222 для tcp-соединений с хоста, который будет отправлять данные.

на хосте, получающем данные, вы можете использовать что-то вроде

$ nc -l -p 22222 | tar xf -

и на хосте, отправляющем данные, как только слушатель выше находится на месте

$ tar cf - files directories | nc -w1 ip.of.host.listening 2222

после передачи данных просто закройте дыру в брандмауэре; или если вы боитесь, что можете забыть закрыть его, вы можете открыть его, скажем, на 30 минут, например

# (iptables -I INPUT -p tcp -s ip.of.host.sending.data --dport 22222 -j ACCEPT; sleep 30m;iptables -D INPUT -p tcp -s ip.of.host.sending.data --dport 22222 -j ACCEPT) &

Если вы беспокоитесь о том, что кто-то отслеживает ваши данные; вы можете использовать cryptcat вместо netcat (nc).

К сожалению, в настоящее время scp не поддерживает это. Но вы можете использовать sshfs на J, смонтировать T и C, а затем скопировать (с помощью cp) на J из точки монтирования T в точку монтирования C.

Если вы объедините autofs и sshfs так, как работает / net (с исполняемой программой automount-map), вы, вероятно, получите работающее автоматическое решение.

Я где-то видел решение sshfs для CentOS, использующее предохранитель.

Почему бы вам не использовать утилиты split, tar или zip, чтобы собрать ваши файлы на более мелкие части, а затем передать каждую часть индивидуально через J. Когда все части будут на C, просто разверните архив tar / zip.

Другой вариант - создать какую-то VPN между T и J. Затем вы можете попробовать подключить общий файловый ресурс / экспорт из T, как если бы это была локальная файловая система (NFS, FUSE и т. Д.).

Другой вариант - подключить ваших клиентов SSH к J и настроить туннель (-L, -R), а затем из J разрешить им входить в T. Таким образом, они создают туннель C-> J-> T и далее. У T есть доступная система передачи файлов (FTP, HTTP). SSH-туннелирование будет отправлять пакеты по мере необходимости.

Лучшее решение - получить больше ресурсов на JumpBox. Если ваши клиенты дают вам деньги, вы должны инвестировать часть их в надлежащую инфраструктуру, чтобы вам / им не приходилось тратить время на прыжки через обруч.

Историческая справка, это именно та ситуация, для которой был создан пассивный режим протокола FTP. Однако, поскольку информация об учетной записи отправляется в открытом виде, вероятность ее дальнейшего использования гораздо ниже.

Самый простой способ - смонтировать диск сервера T на jumpbox с помощью nfs или sshfs: http://fuse.sourceforge.net/sshfs.html Не уверен, хотите ли вы сохранить разрешения, но я считаю, что вы даже можете монтировать папку sshfs при входе в систему.