Это может быть самый нелепый вопрос, который я когда-либо задавал, но я свободно признаю, что я в тупике. Я пытаюсь переместить некоторые файлы с удаленного сервера на мой локальный компьютер. Я использую Ubuntu, очевидно. Теперь просто для фона у этой машины два разных пользователя. Я вошел как один из них; Джо. Поэтому, когда я щелкаю домашнюю папку в Unity, я получаю свою домашнюю папку joe со всеми моими подпапками и файлами. Одна из папок у меня внутри joe называется удаленной. Внутри пульта находится еще одна папка с именем mail. У меня нет проблем при входе на удаленный сервер с использованием openssh или putty, но я не могу скопировать файлы в joe / remote / mail. По какой-то причине я продолжаю ошибаться и перепробовал все варианты, которые только мог придумать. Частичный список будет ...
/joe/remote/mail
/remote/mail
~/joe/remote/mail
~/remote/mail
remote/mail
joe/remote/mail
/home/remote/mail
/home/joe/remote/mail
/local/home/joe/remote/mail
/local/joe/remote/mail
/local/remote/mail
Вы поняли идею. Все, что я пробую, приводит к одной и той же ошибке: папка xxxx не существует. Я предполагаю, что я спрашиваю здесь только о том, что именно openssh и putty считают текущим каталогом на локальной машине? Я искал онлайн-документацию и не нашел ничего такого, что подсказывало бы мне эту простую и бесконечно полезную информацию.
Кроме того, я пошел дальше и скопировал файлы, используя «.» в качестве пункта назначения, который должен скопировать их в текущий каталог на локальном компьютере. Это сработало! Но ... где они? Они не в корне. Их нет в доме. Они не в Джо. Я потерян.
Отредактировано, чтобы добавить, что я использую scp для копирования файлов, если это имеет значение.
openssh по умолчанию является домашним каталогом данного пользователя.
Попробуйте использовать sudo updatedb
, а затем locate filename
, чтобы найти любые файлы.
Командная строка scp
в принципе выглядит следующим образом:
scp options from to
Пока игнорировать параметры (они все равно являются необязательными); Вы можете прочитать о них, используя man scp
.
scp поддерживает локальные и удаленные имена файлов как для части from
, так и для to
. Локальные имена файлов - это обычные имена файлов или каталогов, например:
/home/joe/
/home/joe/remote/mail
/home/joe/remote/mail/inbox
Удаленные имена файлов состоят из двух или трех частей:
Удаленное имя файла создается с использованием таких частей, как это
remote-host:/path/on/remote/host
user@remote-host:/path/on/remote/host
Если вы хотите Скопируйте все файлы из вашего локального каталога "/ home / joe / remote / mail" в каталог "/ opt / backup / joe / mail" на втором сервере "other", используя имя пользователя "admin", вы вводите следующую команду :
scp -r /home/joe/remote/mail admin@other:/opt/backup/joe/mail
(-r
означает рекурсивное копирование каталогов)
Если вы хотите скопировать все файлы из каталога "/ var / spool / mail / joe /" с удаленного сервера «other», используя имя пользователя «admin», в вашу локальную папку «/ home / joe / remote / mail», вы вводите следующую команду:
scp -r admin@other:/var/spool/mail/joe/ /home/joe/remote/mail
Большая часть путаницы в сеансе SSH может возникать из-за того, что нам всегда нужно знать о трех местах, чтобы получить правильные команды.
В дальнейшем я буду ссылаться на @home
как на место, где мы на самом деле физически сидим, и на @remote
как на машину, к которой мы SSH. Как только мы откроем сеанс SSH на удаленной машине, терминал выполнит все следующие команды на удаленной машине. Это визуализируется подсказкой:
admin@home:~$
: мы сидим в нашей машине home в каталоге HOME
user@remote:~S
: мы вошли как пользователь в его HOME на удаленном компьютере
В случае, если мы хотим чтобы скопировать файлы из удаленного в нашего дома, мы должны знать, где мы находимся, то есть, на каком компьютере будет выполняться команда:
admin@home:~$ scp user@remote:/remote_path/source.file /home_path/
выполнит команду scp
на нашей домашней машине, чтобы скопировать source.file
из remote_path
на удаленной машине в home_path
на нашей домашней машине.
Если мы выполнили следующее:
admin@home:~$ ssh user@remote
user@remote:~$ scp user@remote:/remote_path/source.file /home_path/
это будет не совсем то, что мы намеревались в этом, тогда scp был выполнен на удаленной машине для скопируйте source.file
в /home_path
на удаленном компьютере . Чтобы прояснить источник и назначение, мы должны выпустить
user@remote:~$ scp user@remote:/remote_path/source.file admin@home:/home_path/
Тогда source.file
действительно будет скопировано в home_path
, но только если удаленная машина (где выполняется scp) может открыть сеанс SSH для наша домашняя машина.
Мы могли бы дополнительно расширить использование scp для копирования файлов с одной машины remote1
на другую машину remote2
:
admin@home:~$ scp user1@remote1:/remote1_path/source.file user2@remote2:/remote2_path/
. некоторые ограничения, которые мы можем использовать вместо rsync для копирования файлов. Вот пример того, как это будет вызвано:
admin@home:~$ rsync -avze ssh user@remote:/path/source_dir/ /path/destination_dir
Это точно клонирует все файлы с удаленного source_dir
на destination_dir
на нашей домашней машине.
С помощью scp вам нужно дать имя удаленной машины, например:
scp /path/to/file-to-copy joe@hostname:/home/joe/remote/mail/
Предполагая, что вы используете SSH на удаленной машине и хотите скопировать пользователя joe на локальную машину , hostname
- это имя вашего локального компьютера (также может быть IP-адресом, но в обоих случаях он должен быть доступен с удаленного компьютера).
Вы также можете перевернуть ситуацию (например, использовать с VPS, откуда, вероятно, ваш локальный компьютер будет недоступен) и сделать это с вашего локального компьютера:
scp login@remote-machine:/path/to/file/to/copy ~joe/remote/mail/
OBS: когда вы подключаетесь к компьютеру по SSH, терминал находится на удаленном компьютере и «не имеет представления» о том, что является вашим локальным компьютером, и не может получить к нему доступ без имени хоста. Также вам необходим маршрут для доступа к вашему локальному компьютеру с удаленного (вы можете попробовать его с помощью ping
на вашем локальном компьютере).
Когда вы скопировали файлы в «.» они были скопированы в каталог, в котором вы находились в тот момент на удаленном компьютере.
ОБНОВЛЕНИЕ:
Имя хоста - это только имя или имя машины с именем домена, таким как machinename.domain.com, но это будет работать только в том случае, если вы можете подключиться к локальному компьютеру с удаленного компьютера (ваш локальный компьютер имеет публичный IP-адрес ( и DNS-запись), если удаленное соединение осуществляется через Интернет или какое-либо локальное разрешение имен (например, DNS), если оба компьютера находятся в одной сети.
Имя хоста может быть IP-адресом также, если у вас нет имени разрешить систему на вашем компьютере, но компьютер находится в той же сети, или вы работаете с публичными IP-адресами.
Поскольку вы не можете пропинговать свой компьютер с удаленного компьютера, я думаю, что у вас нет способа настроить его доступ. и вы должны использовать обратное решение, предложенное выше, не делать SSH с удаленной машиной и копировать с SCP с вашей машины, поскольку ваша удаленная машина доступна (вы можете использовать SSH на ней).
Чтобы объяснить точку синтаксиса : user @ что-то - это логин на машине, а что-то должно быть именем хоста, а не каталогом. Так что joe @ home / ... ничего не достигнет, так как home - это каталог, и вы не можете войти в каталог.