У меня есть интересная проблема, которую я пытаюсь решить. У меня есть сервер 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 при входе в систему.