У меня есть один большой файл на сервере, one
и я хочу скопировать его на сервер two
с помощью scp
. У меня правильно настроены ключи, и я могу использовать ssh / scp для обоих серверов со своего рабочего стола.
Файл, который мне нужно скопировать, больше свободного места на жестком диске моей рабочей станции, поэтому я хотел сделать:
scp one:/opt/bigfile.tar.gz two:/opt/bigfile.tar.gz
но я получил:
ssh: Could not resolve hostname one: Name or service not known
У нас здесь нет DNS (не спрашивайте меня, почему), поэтому у меня есть это в моем ~ / .ssh / config:
Host one
Hostname <IP address of server one>
User jspurny
Host two
Hostname <IP address of server two>
User jspurny
Если я попробую файл меньшего размера и перенесу его one
на свою рабочую станцию, а затем на него two
, он будет работать нормально:
scp one:/opt/smallerfile.tar.gz .
scp smallerfile.tar.gz two:/opt/
При использовании IP-адресов напрямую, как предлагается в комментарии, я получил:
$ scp jspurny@<one's IP>:bigfile.tar.gz jspurny@<two's ip>:bigfile.tar.gz
Host key verification failed.
lost connection
Не ошибка:
Размер здесь не является проблемой - он был всего лишь «триггером» этой проблемы, поскольку bigfile.tar.gz
на моей рабочей станции не было никакого способа хранения . Проблема возникает независимо от размера файла.
Вопрос:
Почему команда:
scp oneremote:file secondremote:file
выдает ошибку независимо от того, используете ли вы .ssh/config
псевдонимы или напрямую IP-адреса?
Решенный - вроде - все еще ищущий объяснения - я разбил большой файл на более мелкие файлы и передавал их один за другим через свою рабочую станцию. Мне все еще интересно, почему это не сработало. Так что я все равно был бы признателен за объяснение того, что было не так ..
Нашел причину, почему это не удается: кажется, я был глупым. Я думал, что команда
scp one:file two:file
создавал два подключения к каждому серверу, а затем получал данные от одного и сразу отправлял их двум, действуя как ретранслятор.
Это явно не тот случай, потому что простая -v
опция показала, что он на самом деле просто соединяется с одним, а с одного он пытается соединиться с двумя . Что, очевидно, невозможно, поскольку сервер один не должен соединяться с двумя .
Ответы:
Простая труба
Попробуй это:
Первый должен отправить содержимое файла на ваш компьютер, а второй должен отправить его на второй компьютер. Я бы вычислял контрольную сумму на обоих концах после передачи, чтобы убедиться, что по пути ничего не потеряно и не искажено.
Разработанные туннели
Для более сложных приложений вы можете использовать ssh-туннели. Например, вы можете попробовать что-то вроде этого:
Затем вы можете открыть соединение
one
сlocalhost
портом компьютера,5001
и оно будет дважды переадресовано и завершится как соединениеtwo
сlocalhost
портом22
. Это порт ssh, так что вы можете использовать его для еще одного scp, или для rsync, или для чего угодно. Вы также можете запуститьrsync
серверtwo
и перенаправить порт 873 вместо 22. Или вы можете использоватьnc
обе стороны для передачи необработанных данных, используя произвольный номер порта.Основным преимуществом вышеупомянутого подхода является то, что у вас есть двухстороннее TCP-соединение между двумя машинами, а не только однонаправленная труба. Таким образом, обе стороны могут обмениваться информацией, что особенно важно в данном
rsync
случае.источник
Полный кредит за этот ответ идет на /superuser//a/602436/142948
Вам нужна
-3
опция для scp:http://www.openbsd.org/cgi-bin/man.cgi?query=scp&sektion=1
В противном случае второй псевдоним «два» будет разрешен на хосте «один» , который может не существовать.
источник
Поскольку у вас есть пользовательский доступ к исходному серверу (один), почему бы не войти в систему и не выполнить команду scp на этом сервере напрямую ... Если вы беспокоитесь, что это займет слишком много времени, запустите команду внутри, а
screen
затем отсоединитесь от экрана с помощьюCtrl+a d
и пусть работает.Однако, если вы должны сделать это со своей рабочей станции, и ключи SSH от исходного к целевому серверу работают нормально, то отправьте
scp
команду в качестве параметраssh
команды, например:источник
Поиск сообщения об ошибке: «Ошибка проверки ключа хоста». казалось бы, самая простая вещь, чтобы сделать здесь. Я нашел эти вопросы и ответы на askubuntu под названием: Проблема с SSH-соединением с ошибкой «Проверка ключа хоста…» .
Один из ответов на эти вопросы и ответы показал, что проблема заключалась в конфликтующей записи в вашем
~/.ssh/known_hosts
файле. Вы можете удалить проблемные записи из этого файла с помощью любого текстового редактора или использовать эту команду для удаления записей:Где
hostname
будет IP-адрес или имя сервера, с которого вы пытаетесь подключиться. Все сказанное выше будет на хосте два по пути.источник
one
иtwo
серверы с моей рабочей станции без каких-либо проблем .. проблема начинается, когда я запускаюscp one:file two:file
с рабочей станции. И нет ни одногоknown_hosts
файла ни на один, ни на два . Я просто попытался удалить ключи для двоих (даже для одного, чтобы быть уверенным) на моей рабочей станции, но ничего не изменилось (за исключением того, что вы уверены, что у вас есть предложение).scp workstation:file one:file
аworkstation:file two:file
? Очевидно, вам не нужно говорить «рабочая станция: файл», я просто говорю это прямо ради разговора.workstation$ scp one:file file
аworkstation$ scp file two:file
. Во всяком случае, я думаю, что я решил это. Я добавлю это как мой собственный ответ.