Есть ли способ использовать 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. Также обратите внимание, что:
изменить: проблема с tty
чтобы избежать проблем с tty / кодированием, канал можно назвать
mknod tmppipe p
scp -P 9000 localhost:startfile tmppipe &
scp -P 9001 tmppipe localhost:destfile