Это может быть самый смешной вопрос, который я когда-либо задавал, но я свободно признаю, что я в тупике. Я пытаюсь переместить некоторые файлы с удаленного сервера на локальную машину. Очевидно, я запускаю 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 для копирования файлов, если это имеет значение.
Большая часть путаницы из сеанса 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/
Поскольку scp имеет некоторые ограничения, мы можем использовать rsync для копирования файлов. Вот пример того, как это будет вызываться:
admin@home:~$ rsync -avze ssh user@remote:/path/source_dir/ /path/destination_dir
Это будет точно клонировать все файлы с пульта source_dir на destination_dir на нашей домашней машине.
defaultsh по умолчанию для домашнего каталога данного пользователя.
Попробуйте использовать sudo updatedb, а затем locate filename, чтобы найти любые файлы.
С помощью 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 - это каталог, и вы не можете войти в каталог.