У меня есть два удаленных хоста.
host1-> 10.3.0.1
host2-> 10.3.0.2
Оба запускают ssh-сервер.
Сервер ssh прослушивает порт 22 в host1 и порт 6969 в host2. Теперь, используя мой локальный компьютер, мне нужно скопировать что-нибудь с host1 на host2 без входа в host1 или host2 через ssh. Что-то вроде,
scp user@10.3.0.1:/path/to/file user@10.3.0.2/path/to/file
Как я могу это сделать, обратите внимание, что два хоста используют разные порты для SSH.
-P
существует флаг для указания используемого порта, в случае удаленной передачи, ssh не определяет поведение для указания порта для хоста ...Ответы:
В прошлом способ, которым
scp
работали, когда вызывали ( наивно ) копировать файлы между удаленными системами, был очень неудобен: например, если вы написалиscp
сначала откроетssh
сеанс на remote1, а затем он запуститсяscp
оттуда на remote2. Чтобы это работало, вам нужно установить учетные данные авторизации для remote2 на remote1.Вместо этого современный способ сделать это («современный», потому что он был реализован всего несколько лет назад и, возможно, не у всех есть
-3
-capablescp
) требует двух шагов. Первым необходимым шагом является использование~/.ssh/config
всех параметров для подключения к remote1 и remote2 следующим образом:Таким образом, становится возможным передавать все необходимые параметры команде без двусмысленностей : например, если бы мы сказали, что на CLI используется порт 2222 без вышеуказанной конфигурации, было бы неясно, имели ли мы в виду remote1 или remote2 , и аналогично для файла, содержащего криптографические ключи. Таким образом, CLI остается аккуратным и простым.
Во-вторых, используйте эту
-3
опцию следующим образом:-3
Инструктируетscp
для маршрутизации трафика через компьютер , на котором выдается команда, даже если он является третьим участником передачи. Таким образом, учетные данные авторизации должны находиться только на компьютере-эмитенте, третьей стороне.источник
~/.ssh/config
файл: cloud.google.com/compute/docs/gcloud-compute, но я не думаю, что AWS имеет такую же поддержку-v
.В прошлый раз, когда я попробовал это, scp не смог этого сделать. Ваша командная строка выглядит хорошо. Этот обходной путь будет работать:
источник
В моем случае я делал удаленное копирование без
-3
аргумента. Порт, заданный параметром -P, работает с 1-м сервером, но порт 22 используется со 2-м.Решение состоит в том, чтобы отредактировать
/etc/ssh/ssh_config
файлserver1
и добавить эти строки:Таким образом, порт 1234 используется для них обоих. Это может быть и другим.
Это решение имеет лучшую пропускную способность, чем предыдущие решения, потому что общение является прямым.
источник
Источник и цель могут быть указаны как URI в форме scp: // [user @] host [: port] [/ path]
так что вы можете запустить:
источник