Есть ли способ использовать scp -3
для копирования файла с одного удаленного хоста на другой, где оба используют нестандартные порты SSH, без настройки каждого хост, участвующий в ~ / .ssh / config
?
Я видел предложения о том, что -P xxxx
можно использовать перед каждым аргументом файла, например:
scp -3 -P 9000 localhost:source_file -P 9001 localhost:remote_file
Но я get:
-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, чтобы указать альтернативный файл конфигурации, если вы не хотите edit ~ / .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. Также обратите внимание: содержимое файла
edit: tty issue
, чтобы избежать проблем с tty / кодировкой, канал можно назвать
mknod tmppipe p
scp -P 9000 localhost:startfile tmppipe &
scp -P 9001 tmppipe localhost:destfile