SCP с двумя разными портами

15

Как я могу использовать команду scp для копирования файлов между двумя удаленными серверами с моего локального ПК?

удаленный сервер 1: IP = 67.12.21.133 и порт = 6774

удаленный сервер 2: IP = 67.129.242.40 и порт = 6774

scp -rp -P 6774 denny@67.12.21.133: /home/denny/testapp1.txt denny@67.129.242.40:

Выдает ошибку после ввода пароля 67.12.21.133,

SSH: подключение к хосту 67.129.242.40 порт 22: соединение отказано

потерянное соединение

linuxspider
источник
Я только что проверил это, но работает только для первого хоста. Второй заблокирован в порт 22.
Gajdipajti

Ответы:

19

Вы можете использовать, ~/.ssh/configчтобы указать порты, которые будут использоваться для хостов (и для настройки многих других полезных вещей; проверьте страницу руководства man ssh_config):

# ~/.ssh/config

Host 67.12.21.133
  Port 6774

Host 67.129.242.40
  Port 6774

При этом вы должны использовать опцию -3scp, которая копирует файлы через ваш локальный компьютер. В противном случае, scp выдает команду scp через ssh на первом хосте, поэтому он на самом деле выполняется

 ssh -p 6774 denny@67.12.21.133 scp -rp /home/denny/testapp1.txt denny@67.129.242.40:

и затем ~ / .ssh / config первого удаленного хоста (67.12.21.133) используется вместо вашего локального.

Когда вы настроили ~/.ssh/configправильно, это должно работать:

scp -rp3 denny@67.12.21.133:/home/denny/testapp1.txt denny@67.129.242.40:

Конечно, вы также можете скопировать содержимое файла ~ / .ssh / config на ваш первый удаленный хост, а затем вы можете использовать scp без -3опции, которая, вероятно, ускорит передачу.

Или вы можете использовать трюк, который использует scp, и использовать такую ​​командную строку:

ssh -p 6774 denny@67.12.21.133 scp -rp -P 6774 /home/denny/testapp1.txt denny@67.129.242.40:

(Обратите внимание на другой случай параметра порта для ssh и scp: ssh -p 6774vs. scp -P 6774)

PS: я получил эту информацию от Bugzilla OpenSSH, где я ввел это как ошибку: https://bugzilla.mindrot.org/show_bug.cgi?id=2020

Даниэль Куллманн
источник
'-3' не является допустимой опцией - я просто получаю "scp: незаконная опция - 3".
Рич Седман
8

Я не нашел простого решения, но вы можете попробовать использовать sshfs следующим образом:

mkdir /tmp/h1
mkdir /tmp/h2

sshfs -p 6774 user1@host1:/public /tmp/h1
sshfs -p 2211 user2@host2:/data/src /tmp/h2

cp /tmp/h1/files.* /tmp/h2

fusermount -u /tmp/h1
fusermount -u /tmp/h2

Другим способом может быть использование ssh (на самом деле не проверено успешно):

ssh user1@host1 "cat /public/file.bin" | ssh user2@host2 "cat >/data/file.bin"

В настоящее время я не нашел правильный способ ввода двух паролей. Несколько раз он запрашивает два пароля, но никого не принимает. Может быть, если вы обменяете ключи ssh между хостами, это работает. Потому что вам не нужны пароли.

Надеюсь, это поможет? Томас

ТПФ
источник
6

Согласно этой странице в блоге Linux Academy, вам просто нужно использовать -P 6774опцию прямо перед вторым удаленным путем:

scp -rp -P 6774 denny@67.12.21.133:/home/denny/testapp1.txt -P 6774 denny@67.129.242.40:

Каждое использование -Pфлага применяется только к следующему месту в командной строке, а не ко всей команде. Любое местоположение, которое не имеет -Pмежду ним и предыдущим путем (или именем команды [ scp]), по умолчанию использует стандартный порт (22).

Дэн Хансакер
источник
Это не работает для меня. Жаль, потому что это кажется лучшим решением. Ссылка не работает.
david.perez
1
Только что обновил ссылку (хотя я забыл войти первым ...). Академия Linux решила реструктурировать свой сайт. Надеюсь, что это поможет, некоторые!
Дан Хансакер
Если бы только это работало. Но я получаю -P: No such file or directory.
Том
@Tom - На какой системе это работает? У вас может быть другая реализация, scpчем та, на которую ссылаются здесь.
Дэн Хансакер
Это Ubuntu 17.04.
Том
-2

Если вам нужно перенести данные с одного сервера на другой, используйте команду SCP. Сделать так

Просто нажмите Ctrl+ Alt+ Tна клавиатуре, чтобы открыть терминал. Когда он откроется, выполните команду ниже.

scp -pr root@192.168.1.2:/path/to/files /destination/path

Примечание. Параметр -P можно использовать, если вы хотите указать номер порта.

Митч
источник
2
Вы не читали вопрос. У него проблемы с портами. Вы можете установить первый порт, а второй - с помощью параметра -P
gajdipajti
@gajdipajti Я не указал порт в своем ответе и добавил его в качестве заметки. Пользователь также заявил, что он использует тот же порт. Посмотрите на Q. 2-я и 3-я строки :)
Митч
2
Но это не сработает, вы установите первое с -P, а второе останется 22. Просто попробуйте. Я делаю тесты на данный момент, но до сих пор нет рабочих решений.
Гайдипайти
Вы можете использовать опцию -P, только если вы используете нестандартный порт.
Митч