Это работает на меня в 32-разрядном Windows 7. Вы, ВОЗМОЖНО, должны запустить это приложение как Административный пользователь в зависимости от Ваших настроек UAC.
Самый простой способ - просто скопировать его через scp. Кроме того, этот синтаксис действительно работает в отличие от некоторых других предложений.
Вы не можете превзойти этот синтаксис просто. Это позволяет вам рекурсивно копировать, rsync или что угодно, не беспокоясь о потенциально сложных каналах. Этот синтаксис интуитивно понятен, будет легче поддерживаться системными администраторами, которые следят за вами, и не делает бесполезным использованием cat .
scp -3 devappserver:/path/to/copy/from qaappserver:/path/to/copy/to
Из страницы руководства scp : -3
Копии между двумя удаленными хостами передаются через локальный хост. Без этой опции данные копируются напрямую между двумя удаленными хостами. Обратите внимание, что этот параметр отключает индикатор выполнения.
Вот файл ~ / .ssh / config, который устанавливает прямой доступ с вашей рабочей станции к серверам приложений через соответствующий переход (он же сервер-бастион).
MacBook-Pro:~ barrychapman$ cat ~/.ssh/config Host * ServerAliveInterval 60 Host devapplicationsever HostName devapplicationserver.local ProxyCommand ssh -i ~/.ssh/id_rsa barrychapman@devjumpserver.example.com -W %h:%p User barrychapman Host qaapplicationserver HostName qaapplicationserver.local ProxyCommand ssh -i ~/.ssh/id_rsa barrychapman@qajumpserver.example.com -W %h:%p User barrychapman MacBook-Pro:~ barrychapman$
Проверка наличия файла на целевом сервере, его не будет там.
MacBook-Pro:~ barrychapman$ ssh qaapplicationserver ls /tmp/hosts ls: cannot access /tmp/hosts: No such file or directory Killed by signal 1. MacBook-Pro:~ barrychapman$
Теперь давайте скопируем файл с сервера приложений Dev в приложение QA через вашу рабочую станцию.
MacBook-Pro:~ barrychapman$ scp -3 devapplicationserver:/etc/hosts qaapplicationserver:/tmp/ Killed by signal 1. Killed by signal 1. MacBook-Pro:~ barrychapman$
Теперь давайте проверим наличие скопированного файла на сервере приложений QA.
MacBook-Pro:~ barrychapman$ ssh qaapplicationserver ls /tmp/hosts /tmp/hosts Killed by signal 1. MacBook-Pro:~ barrychapman$
При закрытии соединения ProxyCommand вы увидите предупреждающее сообщение «Прервано сигналом 1». Это SSH разрывает соединение ProxyCommand, и не о чем беспокоиться.
Если Интернет - это серия каналов , Unix - это серия каналов - что-то вроде:
cat ginormous-file | ssh user@host1 "cat | ssh user@host2 \"cat >out\" "
должно работать.
Если вам нужно пройти через больше хостов, добавьте больше каналов (и больше вложенных слоев \
-экранированная цитата) по мере необходимости. (Обратите внимание, однако, что если конвейер / побег становится настолько сложным, что вам нужно нарисовать диаграмму или прибегнуть к счету на пальцах , чтобы определить, сколько раз вам придется удваивать побеги , вероятно, пора признать поражение и настройте подходящий VPN!)
cat ginormous-file | ssh user@host1 "cat | ssh user@host2 \"cat >out\" "
должно работать.
Если вам нужно пройти через больше хостов, добавьте больше каналов (и больше вложенных слоев цитаты с экранированием \
) по мере необходимости . (Обратите внимание, однако, что если конвейер / побег становится настолько сложным, что вам нужно нарисовать диаграмму или прибегнуть к счету на пальцах , чтобы определить, сколько раз вам придется удваивать побеги , вероятно, пора признать поражение и настройте подходящий VPN!)
cat ginormous-file | ssh user@host1 "cat | ssh user@host2 \"cat >out\" "
должно работать.
Если вам нужно пройти через больше хостов, добавьте больше каналов (и больше вложенных слоев цитаты с экранированием \
) по мере необходимости . (Обратите внимание, однако, что если конвейер / побег становится настолько сложным, что вам нужно нарисовать диаграмму или прибегнуть к счету на пальцах , чтобы определить, сколько раз вам придется удваивать побеги , вероятно, пора признать поражение и настройте подходящий VPN!)
Если я правильно понимаю, у вас есть два сервера перехода (jump-qa и jump-dev), защищающие два сервера приложений (app-qa и app-dev); серверы перехода могут передавать друг другу ssh; ни один ящик, кроме соответствующего сервера перехода, не может подключиться по ssh к соответствующему серверу приложений. Серверы приложений не могут использовать ssh никому. Файл должен быть перенесен из app-dev в app-qa. На обоих серверах перехода не хватает места для промежуточной копии данных.
Вы можете решить эту проблему с помощью ssh-туннелирования. Мы устанавливаем соединение с одним удаленным сервером приложений, несущим удаленный туннель, который подключается обратно к неиспользуемому порту на его сервере перехода. Мы установили второе соединение от одного сервера перехода к другому серверу перехода, несущее туннель, который захватывает свободный конец удаленно перенаправленного порта из первого туннеля и отправляет его на ssh-порт другого сервера приложений.
Настройте туннели (каждую из этих команд нужно будет запускать в отдельном окне на jump-qa
):
jump-qa% ssh app-qa -R 2345:localhost:2346
jump-qa% ssh jump-dev -L 2346:app-dev:22
Теперь вы должны обнаружить, что в app-qa вы можете выполнять telnet localhost 2345
и получите баннер ssh app-dev. Затем вы можете скопировать файл данных:
app-qa% scp -P 2345 localhost:/path/on/app-dev/data.dat data.dat
OpenSSH версии 7.3 и выше поддерживает -J
.
-J [user@]host[:port]
Подключитесь к целевому хосту, сначала установив ssh-подключение к хосту перехода, а затем установив оттуда TCP-пересылку к конечному пункту назначения. Можно указать несколько переходов через запятую. Это ярлык для указания директивы конфигурации ProxyJump.
Для A → B → C на A просто:
tar -cf - file1 file_n | pv | ssh -C -J userB@B:portB userB@C -p portC 'tar -C destDir -xvf -'
-J
. -C
tar, чтобы оставить файлы в домашней папке. -C
(или tar -z
). Особенно полезно, если данные представляют собой обычный текст (несжатый). pv
отслеживание прохождения данных по каналу. Альтернативой может быть прогресс
. На основе ответов Флориана Фида и Дэна Гартуэйта.