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

Есть ли способ использовать 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 к другому хосту.

1
задан 26 September 2017 в 15:58
3 ответа

Решение 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"

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

2
ответ дан 3 December 2019 в 17:34

Вы не можете.

Все, что вы можете сделать, это запустить 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
1
ответ дан 3 December 2019 в 17:34

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

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

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

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

edit: tty issue

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

mknod tmppipe p
scp -P 9000 localhost:startfile tmppipe &
scp -P 9001 tmppipe localhost:destfile
1
ответ дан 3 December 2019 в 17:34

Теги

Похожие вопросы