В прошлом способ работы scp
, когда он вызывался (наивно) для копирования файлов между удаленными системами, был очень неудобным: например, если вы написали
scp user1@remote1:/home/user1/file1.txt user2@remote2:/home/user2/file1.txt
Сначала scp
открывает сеанс ssh
на remote1, а затем запускает scp
оттуда на remote2. Чтобы это работало, вам нужно установить учетные данные авторизации для remote2 на remote1.
Вместо этого современный способ сделать это ("современный", потому что он был реализован всего несколько лет назад, и, возможно, не у всех есть -3
-capable scp
) требует двух шагов. Первым необходимым шагом является использование ~/.ssh/config
для настройки всех параметров подключения как к remote1, так и к remote2 следующим образом:
Host remote1.example.org
Port 2222
IdentityFile /path/to/host1-id_rsa
Host remote2.example.org
Port 6969
IdentityFile /path/to/host2-id_rsa
Таким образом, становится возможным передать все необходимые параметры команде без двусмысленностей: например, если бы мы сказали, что на CLI используется порт 2222 без вышеуказанной конфигурации, было бы неясно, имели ли мы в виду remote1 или remote2, и аналогично для файла, содержащего криптографические ключи. Таким образом, CLI остается аккуратным и простым.
Во-вторых, используйте опцию -3
, как показано ниже:
scp -3 user1@remote1:/home/user1/file1.txt user2@remote2:/home/user2/file1.txt
Опция -3
указывает scp
направлять трафик через ПК, на котором выполняется команда, даже если он является третьей стороной для передачи. Таким образом, учетные данные для авторизации должны находиться только на компьютере-эмитенте, третьей стороне.