Я вошел на свой веб-сервер черезSSHиспользуя инструмент под названиемMobaXterm(что-то вроде Putty, но с расширенными функциями, это не так важно...)
Моя проблема в том, что я хочу отправить каталог со своего локального компьютера (Windows) в определенный каталог этого сервера (Linux).
Поэтому я попытаюсь использоватьscpкоманда, как показано здесь:http://www.hypexr.org/linux_scp_help.php
Я сделал так:
-jailshell-4.1$ scp -r C:\Users\Andrea\Documents\Betrivius\candycane-0.9.6\candycane /home6/XXX/public_html
ssh: Could not resolve hostname C: Name or service not known
Но, как видите, я получаю ошибку.
Почему? Что я упускаю? Как исправить эту проблему?
Спасибо
решение1
Вероятно, вы запускаете это в локальной оболочке MobaXterm (т.е. локальной для машины Windows). Если это так, вам нужно обновить синтаксис команды scp, чтобы он соответствовал этой среде, хотя синтаксис в любом случае неверен.
MobaXterm обеспечивает доступ к локальным дискам в своей оболочке через точку монтирования /drives/X
, где X — буква диска Windows.
Кроме того, (упрощенный) общий синтаксис scp, независимо от среды, выглядит следующим образом:
Использование scp:
scp [[user@]host1:]/path[/filename] [[user@]host2:]/path/[filename]
Первая последовательность ( [[user@]host1:]/path[/filename]
) — это раздел «FROM»; источник файла или файлов для копирования. Вторая — «TO»; пункт назначения. Скобки указывают на необязательные аргументы.
На самом деле это просто версия стандартной команды cp с поддержкой ssh; в разделе, предшествующем ей, :
содержится специфическая для ssh информация, а информация после нее относится к операции cp.
пользователь:
user
по умолчанию используется ваше текущее локальное имя пользователя — его можно не указывать, если это правильное имя пользователя как в исходном, так и в конечном файле.
хозяин:
host
по умолчанию используется локальный компьютер (localhost); поэтому, если вы копируете на/с локальной машины И имя пользователя на localhost, которое будет использоваться, является именем текущего пользователя, вы можете опустить этот аргумент для локальных файлов.
Путь к файлу:
path/filename
по умолчанию указан домашний каталог пользователя, и его можно опустить, если это необходимо. filename можно опустить при выполнении рекурсивного копирования, как в вашей ситуации, — в этом случае просто укажите путь. Обычно полный путь и имя файла указываются в разделе FROM, а в разделе TO — только путь (по умолчанию имя файла будет сохранено).
Я использую remoteuser
и remotePC
в качестве имени пользователя и имени хоста удаленного ПК; замените на правильные имена.
Правильный синтаксис в вашем примере:
scp -r "/drives/C/Users/Andrea/Documents/Betrivius/candycane-0.9.6/candycane" remoteuser@remotePC:/home6/XXX/public_html
Используйте команду man scp
илиэтот сайтдля получения дополнительных сведений (аргументы, другая информация об использовании).
Вариант графического интерфейса
В качестве альтернативы MobaXterm предоставляет графический файловый браузер (построенный на основе sftp или scp в зависимости от параметров конфигурации), который обеспечивает двунаправленную передачу файлов методом перетаскивания при подключении к удаленному хосту через ssh.Подробности здесь.
решение2
Если только этот веб-сервер не имеет возможности напрямую подключиться к вашей машине Windows (через порт 22, для чего потребуется работающий демон SSH и перенаправление портов), вам придется вызывать SCP со стороны Windows. MobaXTerm — это клиент ssh, я не уверен, есть ли в нем встроенный SCP (лично я им не пользуюсь), но лучшим решением здесь будет использование клиента SCP, будь то клиент командной строки или клиент с графическим интерфейсом.
Довольно популярный клиент для Windows —WinSCP, это мой клиент, который всегда под рукой, когда у меня нет выбора, кроме как использовать Windows.
решение3
Отвечать
Почему команда scp выдает ошибку?
, ошибка заключается в том, что
ssh: Could not resolve hostname C: Name or service not known
, а используемая команда
scp -r C:\Users\Andrea\Documents\Betrivius\candycane-0.9.6\candycane /home6/XXX/public_html
Я бы сказал:
синтаксис C:\Users\....
неверен. В этом контексте у вас есть две возможности описать путь:
foo/bar/...
: означает, чтоfoo
это каталог (папка), видимый из вашего пути, это может быть ваш текущий путь (pwd
) или переменная окружения пути (echo $PATH
)./foo/bar/...
означает, чтоfoo
это каталог (папка), находящийся в корне вашей файловой системы.
Так как вы использовали первый вариант (потому что нет "/" перед "C:"), оболочка ищет C:
в пути, но не может его найти. Следовательно, она пытается сопоставить другой синтаксис: [user@]host1:/path/..../filename
. В этой ситуации ssh жалуется, потому что не может найти IP-адрес для C:
(потому что думает, что C:
это имя хоста). Поиск IP-адреса, соответствующего имени хоста, называется "разрешение имени хоста"; здесь это решение не срабатывает, поэтому вы понимаете ошибку.
решение4
В Windows у меня сработала следующая команда: scp -r "Reqd.Имя папки в кавычках" username@remote_server:Путь к файлу на сервере
scp -r "ABC" shivam@удалённый_сервер:/media/External/shivam.
Перед выполнением перейдите в папку, в которой находится нужная папка.