SSH Навигация путаница

Это может быть самый нелепый вопрос, который я когда-либо задавал, но я свободно признаю, что я в тупике. Я пытаюсь переместить некоторые файлы с удаленного сервера на мой локальный компьютер. Я использую 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 для копирования файлов, если это имеет значение.

4 ответа

Решение

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

(The -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

  • user@remote:~S: мы вошли как пользователь в его ДОМ на удаленной машине

Что мы хотим:

В случае, если мы хотим скопировать файлы с пульта в наш дом, мы должны знать, где мы находимся, то есть на каком компьютере будет выполняться команда:

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

Поскольку у scp есть некоторые ограничения, мы можем вместо этого использовать rsync для копирования файлов. Вот пример, как это будет вызвано:

admin@home:~$ rsync -avze ssh user@remote:/path/source_dir/ /path/destination_dir

Это точно клонирует все файлы с пульта source_dir к destination_dir на нашей домашней машине.

По умолчанию openssh - домашний каталог данного пользователя.

Попробуйте использовать sudo updatedb с последующим locate filename найти любые файлы.

С помощью 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 - это каталог, и вы не можете войти в каталог.

Другие вопросы по тегам