Как указать номер порта в команде Unix (SCP) при копировании файлов с одного удаленного сервера на другой?
У меня есть случай, когда есть 2 удаленных хоста, каждый с уникальным номером порта, который я должен указать при использовании команды SCP. Нет проблем с указанием уникального (не 22) номера порта для первого, но я не могу понять, как указать его для второго.
Вот как это выглядит сейчас -
scp -P 1234 username@site.com:/path/to/file username2@site2.com:/path/to/directory
2 ответа
То, как вы запускаете scp в своем вопросе, будет просто вызывать программу scp на первом хосте, сообщая ей об отправке файла на второй хост. Вы можете напрямую вызвать ssh
чтобы запустить команду scp на первом хосте, как вам нравится:
ssh -p1234 user1@host1 'scp -P2345 /path/to/file user2@host2:/path/to/directory'
Если первый хост не может подключиться напрямую ко второму хосту, вы обычно используете опцию scp -3
отправить данные с первого хоста на второй хост через ваш локальный хост. Если вы находитесь в таком положении, вы можете эмулировать, как scp выполняет такой тип передачи, хотя это своего рода хак:
yes "" | tr '\n' '\0' |
ssh -p1234 user1@host1 'scp -f /path/to/file' |
ssh -p2345 user2@host2 'scp -t /path/to/directory'
Это основано на том, как работает протокол SCP. Первый ssh
строка запускает scp на первом удаленном хосте в режиме "удаленный источник" для отправки исходного файла. Второй ssh
линии запускает scp на втором хосте в режиме "удаленного приемника", чтобы получить файл и записать его в каталог. "удаленный источник" и "удаленный приемник" - вот что scp
обычно работает на удаленной системе при получении или отправке файлов соответственно.
yes "" | tr '\n' '\0' |
line создает поток байтов NUL (Ascii 0), необходимых для работы протокола. scp -f
Экземпляр читает их и не будет отправлять файлы без них. Существуют и другие способы генерирования потока байтов NUL, если хотите.
Не знаю, как это сделать с аргументами, но вы можете попробовать отредактировать ~/.ssh/config
Host test
HostName test.com
Port 22000
User me