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

SCP на двух удаленных хостах с нестандартными портами

Есть ли способ использовать scp -3 для копирования файла с одного удаленного хоста на другой, где оба используют нестандартные порты SSH, без настройки каждого хоста, участвующего в ~/.ssh/config?

Я видел предложения, которые -P xxxx можно использовать перед каждым аргументом файла, например:

scp -3 -P 9000 localhost:source_file -P 9001 localhost:remote_file

Но я получаю:

-P: No such file or directory
9001: No such file or directory

в Ubuntu 17.04.

Обратите внимание, что приведенное выше не так безумно, как кажется; оба задействованных порта localhost на самом деле сами являются туннелями SSH к другому хосту.

Решение Archemar будет копировать данные, но не все остальное (пользователь, группа, разрешения, ACL, символические ссылки). Поэтому я рекомендую использовать tar (который может обрабатывать целые деревья за раз, если хотите):

ssh -p 9000 localhost tar cf - source_file | ssh -p 9001 localhost tar xvf -

Вы можете добавить -z переключитесь на tar, чтобы он сжимал данные, если это важно. Вы можете выбрать любой целевой каталог, добавив -C DIRECTORY. Это не заботится о разных именах файлов на исходном и целевом хостах, поэтому вам может потребоваться добавить `

ssh localhost -p 9001 "cd DIRECTORY; mv old new"

Другой простой способ - «временно припарковать» данные для копирования на вашем локальном хосте, но, скорее всего, вы уже подумали об этом и отказались от них.

Вы не можете.

Все, что вы можете сделать, это запустить scp как удаленную команду:

ssh -p 9000 localhost "scp source_file -P 9001 localhost:remote_file"

Или используйте параметр -F, чтобы указать альтернативный файл конфигурации, если вы не хотите редактировать ~ / .ssh / config

Еще одна хитрость - использовать sshfs:

sshfs -p 9000 localhost:/somedir /tmp/src && sshfs -p 9001 localhost:/somedir /tmp/dst && scp /tmp/src/file /tmp/dst/file && fusermount -u /tmp/src && fusermount -u /tmp/dst

я бы попробовал

ssh -p 9000 localhost cat source_file | ssh -p 9001 localhost "cat > remote_file"

это означает, что вы можете использовать ssh. Также обратите внимание, что:

  • содержимое файла будет приходить на localhost и отправляться с localhost,
  • если файл небольшой, лучше скопировать во временное локальное расположение,
  • если файл большой, что-то пошло не так, вам придется все заново перезапустить.

изменить: проблема с tty

чтобы избежать проблем с tty / кодированием, канал можно назвать

mknod tmppipe p
scp -P 9000 localhost:startfile tmppipe &
scp -P 9001 tmppipe localhost:destfile