Используйте scp для передачи файла из локального каталога X в удаленный каталог Y


99

Я посмотрел вокруг на другие вопросы здесь и на различные учебники "использования scp" в Интернете, но я не могу разобраться, что не так.

Я использую Linux Mint и пытаюсь понять, как работает scp .

У меня есть файл file.ext (на моем компьютере) в каталоге / home / name / dir /

Я подключаюсь к удаленной машине, используя ssh , например:

ssh -p 2222 username@domain

он спрашивает меня пароль, и оболочка отображает:

username@domain ~ $

Теперь, если я выполню команду (до того, как я запустил ssh, я был в локальном каталоге / home / name / dir ):

scp -r -P 2222 file.ext username@domain 

вывод:

cp: cannot stat ‘file.ext’: No such file or directory

Тот же результат, если вместо file.ext я пишу полный путь

scp -r -P 2222 /home/name/dir/file.ext username@domain 

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

scp -r -P 2222 file.ext username@domain:~/

но когда я делаю это и нажимаю «Enter», ничего не происходит, как если бы оболочка ожидала дальнейшего ввода.

Резюме моих проблем:

  • cp: нет такого файла или каталога
  • оболочка "застряла" на ~ /

Какие-либо предложения?


немного неясно, связана ли ваша проблема только с тем, что вы находитесь не на том компьютере ... не могли бы вы поставить префикс каждой команды с хостом, на котором вы работаете? например localuser@machineA: ssh -p 2222 username@domain(чтобы указать, что вы выполняете команду ssh как localuser на машине
A

1
при использовании scp, то удаленная сторона всегда должна содержать двоеточие (например remotehost:/tmp), иначе это будет просто делать обычную копию ( scp /tmp/foo.txt example.comскопирует /tmp/foo.txtв локальный файл example.com)
umläute

уберите -rфлаг, так как он не нужен для копирования отдельных файлов (он используется для рекурсивного копирования каталогов)
umläute

Вы вводите команду scp внутри сеанса sshe ? Это имело бы смысл, если вы находитесь на локальной машине.
Алексис

Ответы:


119

Вам нужно запустить scpкоманду с локального компьютера, а не с удаленного. Вам не нужно sshвообще:

dragonmnl@local $ scp -P 2222 file.ext username@domain:~/ 

Вам также не нужно -r:

 -r      Recursively copy entire directories.  

Если вы уже вошли на удаленный компьютер и хотите скопировать его с локального компьютера, вам необходимо убедиться, что ваш локальный компьютер доступен через Интернет и sshнастроен. Я не думаю, что это то, что вам нужно, но если это так, просто запустите это с пульта:

username@domain $ scp dragonmnl@local:/path/to/file.ext ~/

1
Благодарю. проблема была в том, что я пытался запустить scp внутри ssh сессии. теперь это работает!
dragonmnl

28

Я предоставляю два способа загрузки файла вверх / вниз между удаленным и локальным компьютером (я использую Mac air):

В этом случае я хочу увеличить / уменьшить «11.jpeg» между локальным и удаленным:

1.

Скопируйте файлы на сервисе в локальный каталог: для выполнения этой команды вы должны находиться в локальном терминале bash, а не в ssh!

scp username@domain:/home/xxx/xxx/11.jpeg /Users/username/Desktop/  

скопируйте файлы в локальном каталоге в удаленный сервис: также вы должны быть в локальном терминале bash

scp /Users/username/Desktop/11.jpeg username@domain:/home/xxx/xxx
  1. Чтобы достичь того же намерения при входе в SSH , вы должны сначала установить «Системные настройки> общий доступ> удаленный вход> всех пользователей (я не уверен, что вы должны установить для« всех пользователей », но это работает в этой ситуации ) »Mac скажет вам« Для удаленного входа на этот компьютер введите: ssh username @ xxxxxx, а затем введите следующую команду:

    scp username @ domain: /home/xxx/xxx/11.jpeg username @ xxxxxx: / Users / имя пользователя / Desktop /

Эта команда выше для загрузки файла с удаленного на локальный при входе в ssh. Просто измените два пути, когда вы хотите загрузить файл.


Наконец, я считаю, что Filezilla, вероятно, самый удобный в повседневной работе ~~
maizer

5

Если вы запускаете эту команду scp на удаленной машине, она ищет file.ext«локальный» файл, то есть на удаленной машине.

Чтобы скопировать файл с удаленного компьютера на локальный, используйте scp -P 2222 username@domain:dir/file.ext localdir(при условии, что он file.extнаходится ~/dirна удаленном компьютере, как в вашем примере). Если вы работаете scpна удаленном компьютере, поменяйте местами «локальный» и «удаленный».


1
ОП хочет скопировать с локального на удаленный, см. Заголовок ОП.
Тердон

К сожалению, вы правы. Но он, очевидно, делает это задом наперед ...
Алексис

3

Используйте scpкоманду

Если вы хотите перенести папку, просто zipсначала, мы можем unzipпозже.

С вашего компьютера запустите это:

$ scp your_path_to_the_file/the_file root@10.145.198.100:~/

Здесь rootваша учетная запись и 10.145.198.100IP-адрес удаленного сервера. Мы собираемся скопировать the_fileв ~/папку на пульте.

Распаковать файл:

$ unzip the_zip_file.zip -d destination_folder

Почему бы rootдаже иметь доступ SSH на удаленной машине? Это довольно небезопасно. Лучше использовать обычное использование, а затем sudoделать то, что root должен делать на этой машине.
Кусалананда

1

Просто небольшой вклад, может быть, он может помочь новичкам, таким как я: путь к удаленному каталогу должен быть написан так: username@domain:~/remote_directory

Здесь я хочу подчеркнуть, что мы всегда должны добавлять :~/


0

Решение для копирования файлов из Linux clientвLinux Server

  1. Проверьте, sshdработает ли на вашем сервере, используя: ps aux | grep sshd

  2. Если не установить OpenSSHс помощью sudo apt-get install openssh-server openssh-client https://www.tecmint.com/install-openssh-server-in-linux/

  3. Перезагрузите сервер и убедитесь, что sshdон работает с помощью ps aux | grep sshd

  4. Если вам нужно, вы можете настроить свой /etc/ssh/sshd_configфайл, но это не обязательно для простых конфигураций

  5. убедитесь, что порты открыты, используя netcat nc -v -z 127.0.0.1 22

  6. Чтобы скопировать файлы с Linuxклиента на Linuxклиент, используйте scp следующим образом scp ~/filename.md username@10.22.33.45:~/folder/filename.md

  7. Чтобы убедиться, что файл был скопирован, используйте ssh username@10.22.33.45и укажите свой пароль.

Решение для копирования файлов из Linux clientWindows

  1. Есть несколько клиентов для запуска серверов SSH в Windows, таких как OpenSSH от MS

    MobaSSH

    Битвис SSH сервер

  2. Установите один из указанных выше серверов и убедитесь, что порт 22 открыт с помощью

    netsh advfirewall firewall добавить правило name = "SSH Port 22" dir = в действии = разрешить протокол = UDP localport = 22

    netsh advfirewall firewall add rule name = "SSH Port 22" dir = out action = разрешить протокол = UDP localport = 22

    netsh advfirewall firewall add rule name = "SSH Port 22" dir = в действии = разрешить протокол = TCP localport = 22

    netsh advfirewall firewall add rule name = "SSH Port 22" dir = out action = разрешить протокол = TCP localport = 22

    netsh advfirewall выключил все профили

  3. Сравнения этих серверов:

    Битвис SSH сервер

    1. Обеспечивает почти близкую к родной cmdподсказку, powershellподсказку, автозаполнение

    2. Предоставляет дополнительные возможности для настройки, если вам нужно расширенное использование

    3. Пользовательская настройка для простых нужд - 0. Я начал работу над ней в течение 2 минут, потратив много времени, пытаясь получить MobaSSHи OpenSSHработать.

    4. Для копирования файлов с помощью scp используйте: scp ~/filename.md username@10.33.44.45:/C/Users/username/filename.md

    5. Бесплатно для личного пользования, $ 99 для профессионального использования. Из-за множества функций и отличной интеграции цена вполне стоит денег

    MobaSSH:

    1. предоставляет оболочку linux для windows, в которой работают простые команды linux, например ls, cpи findт. д., аналогичныеMINGW64

    2. вы можете получить доступ cmdи powershellнапрямую, набрав cmdили powershell

    3. Поддержка Unicode плохая. Кодировка не правильная. Например, если вы попытаетесь запустить Pythonинтерпретатор, произойдет сбой. Вам нужно будет изменить кодировку вручную, используя ( https://stackoverflow.com/a/12834315/4752883 ): chcp 65001 set PYTHONIOENCONDING=utf-8 и затем запустить приглашение Python

    4. Отличительной особенностью MobaSSH является то, что он имеет очень простой пользовательский интерфейс, а также scpи sshхорошо интегрирован. Так будет работать для простых случаев использования

    5. Чтобы скопировать файлы с Linuxклиента на Windowsработающий сервер MobaSSH: используйте scp ~/filename.md username@10.33.44.45:/cygdrive/c/Users/username/filename.md Это потому, что MobaSSHон основан на том, что cygwinего диски сопоставлены так же, как и cygwinдиски.

    Используйте виртуальные машины от Microsoft с OpenSSHv6.7, установленным с https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/ , OpenSSHv6.7 уже установлен.

    1. Он очень глючный, и вам нужно будет сильно его настроить.

    2. Завершение команды не работает

    3. При перемещении курсора на терминал будут оставаться пустые места

    4. Python не работает

    5. Более поздние версии OpenSSH, возможно, улучшили его. Кроме того, MS, похоже, делает OpenSSH доступным через Optional Features https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/


-1

Если вы оказались на OSX ...

Когда я попытался запустить его с именем пользователя @ local: / file_directory ...

Я получил следующую ошибку:

ssh: local: node name or service name not known

Решение

На моем Mac я должен был сделать следующее, чтобы настроить локальный ssh:

«Системные настройки» -> «Интернет и сети» -> «Общий доступ» -> ВКЛЮЧИТЬ «Удаленный вход»

Это тогда обеспечило имя пользователя @ IP-адрес.


-1

У меня была такая же проблема сегодня на MAC.

Введите следующую команду:

scp /local-file-path/ /-remote-location-path/
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.