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

Это может быть самый смешной вопрос, который я когда-либо задавал, но я свободно признаю, что я в тупике. Я пытаюсь переместить некоторые файлы с удаленного сервера на локальную машину. Очевидно, я запускаю Ubuntu. Теперь, только для фона у этой машины есть два разных пользователя. Я зарегистрирован как один из них; Джо. Поэтому, когда я нажимаю главную папку в Unity, я получаю домашнюю папку joe со всеми моими подпапками и файлами. Одна из папок, которые у меня есть внутри joe, называется remote. Внутри удаленного - другая папка с именем mail. У меня нет проблем с регистрацией на удаленном сервере с помощью opensh или 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 для копирования файлов, если это имеет значение.

1
задан 12 July 2012 в 09:21

3 ответа

Большая часть путаницы из сеанса 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 на нашей домашней машине. [!d14 ]

Что мы, вероятно, не хотим

Если мы выполним следующее:

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 на нашей домашней машине.

2
ответ дан 25 May 2018 в 08:45
  • 1
    То, что вы говорите, кажется бесконечно более логичным, чем большинство, но все, что я вижу в ssh, использует путь / home / path или / local /, а не синтаксис user @ home / path. Сказав это, я попытался использовать синтаксис user @ home / path, и я все равно получаю отсутствие такого файла или каталога. То, что может меня отключить, - это конкретный синтаксис для «user @ home». Например, я пользователь " joe " на машине с именем «hal». Будет ли я использовать " joe @ hal / path " или "joe @ home / path " или "joe @ local / path", или что? Я на самом деле пробовал все три из них и до сих пор не получил такую ​​ошибку, поэтому я все еще немного потерял. – Blind Fish 12 July 2012 в 18:47
  • 2
    @BlindFish: возможно, это будет joe@hal:/home/joe/directory при просмотре с "@ home " для команды scp, но это может быть только /directory, когда вы действительно вошли в сеанс SSH на удаленной машине , Следите за подсказкой своего терминала - тогда joe@hal:~$ (где ~ совпадает с /home/joe/). Попробуйте cd directory из сеанса SSH и посмотрите, как ваше приглашение превратится в joe@hal:~/directory$. – Takkat 12 July 2012 в 19:00
  • 3
    Я не могу вывести из сессии ssh. Он просто возвращает меня к корневой машине на дому, а затем останавливается. Единственный способ вернуться на локальный компьютер - убить сессию ssh. Тем не менее, просто для того, что стоит, когда я открываю терминал, он открывает мою домашнюю папку с приглашением joe @ hal: ~ $ Поскольку я запускаю сеанс ssh из этого приглашения, логично, что именно здесь сессия ssh оглянитесь назад при попытке скопировать локально. Тем не менее, я не получаю от этого никакой любви. – Blind Fish 12 July 2012 в 22:32
  • 4
    @BlindFish: вам может понадобиться экспериментировать, чтобы получить эту идею. Почему бы не открыть два сеанса терминала, один SSHed на пульте дистанционного управления, другой для локальных команд? – Takkat 12 July 2012 в 22:42
  • 5
    Я начинаю думать, что это может быть проблема связи. Я полностью понимаю, что я смущен в отношении ssh, но я пытаюсь взломать это путем использования различных руководств, и все больше и больше кажется, что эта проблема не должна происходить. Я пробовал еще две вещи, обе из которых дали мне странные неудачи. Сначала я пробовал scp -r root @ & lt; domainname.com & gt;: / var / spool / vmail joe @ & lt; ip-адрес локальной машины & gt;: / remote / vmail, и я получил сообщение об ошибке, с которой я не мог подключиться к ip-адресу , Запуск персонажей, после второго комментария, будет детализирован вторым. – Blind Fish 12 July 2012 в 22:53

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

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

0
ответ дан 25 May 2018 в 08:45
  • 1
    Если бы это было так, то / remote / mail не выдали бы ошибку, правильно? – Blind Fish 12 July 2012 в 09:03

С помощью scp вам нужно указать имя удаленной машины, например:

scp /path/to/file-to-copy joe@hostname:/home/joe/remote/mail/

Предполагая, что вы находитесь на удаленной машине SSHed, и хотите скопировать его на пользователя локальная машина. hostname - это имя вашего локального компьютера (может быть IP-адресом, но в обоих случаях оно должно быть доступно с удаленного компьютера).

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

scp login@remote-machine:/path/to/file/to/copy ~joe/remote/mail/

OBS: когда вы используете SSH на машине, терминал на удаленном компьютере и «не имеет понятия» о том, что является вашей локальной машиной, и не может получить к ней доступ без своего имени хоста. Также вам нужно иметь маршрут для доступа к вашему локальному компьютеру с удаленного устройства (вы можете попробовать его с помощью ping на вашем локальном компьютере).

При копировании файлов в «.» они были скопированы в каталог, который вы были в тот момент на удаленной машине.

UPDATE:

Имя хоста является только машинным или машинным именем с доменом, таким как machinename.domain.com, но это будет только работайте, если вы можете связаться с локальным компьютером yur с удаленного компьютера (ваш локальный компьютер имеет общедоступный IP-адрес (и запись DNS), если удаленный доступ через Интернет или какое-то локальное разрешение имен (например, DNS), если обе машины находятся в одной сети .

Имя хоста может быть IP-адресом, также если у вас нет системы разрешения имен на вашем компьютере, но машина находится в той же сети или вы работаете с публичными IP-адресами.

Поскольку вы не можете пинговать свою машину с удаленной машины, я думаю, что вы не можете ее настроить, и вы должны использовать предложенное выше инвертированное решение, не выполняющее SSH на удаленную машину, и копирование с SCP с вашего компьютера в качестве удаленной машины (вы можете использовать SSH).

Чтобы объяснить точку синтаксиса: user @ something - это логин для машина и что-то должно быть именем хоста, а не каталогом. Итак, joe @ home / ... не достигнет ничего, поскольку home - это каталог, и вы не можете войти в каталог.

0
ответ дан 25 May 2018 в 08:45
  • 1
    Я попробовал это. Я попробовал ~ joe / remote / mail / Я попробовал joe @ & lt; machinename & gt; / remote / mail /. Я попробовал ~ / remote / mail. Я просто попробовал все эти три. Тот же результат. Нет такого файла или каталога. – Blind Fish 12 July 2012 в 10:12
  • 2
    если вы используете SSHed на удаленном компьютере. И вы можете выполнить ping на локальной машине с помощью ping hostname, правильный путь - joe@hostname:~/remote/mail или joe@hostname:/home/joe/remote/mail. Если вы не можете выполнить ping ваш компьютер из SSH, вы должны использовать инвертированный способ, описанный в ответе (копирование с вашей локальной машины). – laurent 12 July 2012 в 10:20
  • 3
    Возможно, меня смущает «имя хоста». Я использую имя машины, как оно появляется, когда я открываю терминал «joe @ machinename: " Это то, что вы имеете в виду? Если это так, я не могу пинговать локальную машину по имени машины или joe @ machinename. Можете ли вы прояснить это немного для полного ssh noob? – Blind Fish 12 July 2012 в 10:32
  • 4
    Обновление ответа – laurent 12 July 2012 в 18:47
  • 5
    Если вы хотите, дайте мне команду, которую вы выдаете для доступа к удаленной машине с SSH, и я покажу вам команду scp, чтобы вы могли вычесть, как она работает. – laurent 12 July 2012 в 19:36

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

Похожие вопросы: