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:~$: мы сидим в нашей домашней машине в каталоге HOMEuser@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 - это каталог, и вы не можете войти в каталог.