Використовуйте 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 як локальний користувач на machineA)
umläute

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

видаліть -rпрапор, оскільки це не потрібно для копіювання окремих файлів (використовується для рекурсивної копіювання каталогів)
umläute

Ви видаєте команду scp всередині сесії sshe ? Було б сенс, якщо ви знаходитесь на локальній машині.
alexis

Відповіді:


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 повітря):

У цьому випадку я хочу вгору / вниз "11.jpeg" між локальним і віддаленим:

1.

Копіюйте файли по службі в локальний dir: Ви повинні бути в локальному терміналі bash, щоб виконувати цю команду, а не тоді, коли ви знаходитесь в ssh!

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

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

scp /Users/username/Desktop/11.jpeg username@domain:/home/xxx/xxx
  1. Щоб досягти такого ж наміру під час входу в SSH , спершу потрібно встановити "Налаштування системи> спільний доступ> віддалений вхід> всі користувачі (я не впевнений, чи потрібно встановити" всі користувачі ", але це працює в цій ситуації ) "Mac скаже вам" Щоб увійти на цей комп'ютер віддалено, введіть: ssh username @ xxxxxx, а потім введіть команду нижче:

    scp ім'я користувача @ домен: /home/xxx/xxx/11.jpeg ім'я користувача @ xxxxxx: / Користувачі / ім’я користувача / Настільний /

Ця команда, наведена вище, призначена для завантаження файлу з віддаленого до локального під час входу в ssh. Просто змініть два шляхи, коли ви хочете завантажити файл.


Нарешті, я вважаю, що Filezilla є, мабуть, найбільш зручним у щоденній роботі ~~
maizer

5

Якщо ви виконуєте цю команду scp на віддаленій машині, вона шукається file.extяк "локальний" файл, тобто на віддаленій машині.

Щоб скопіювати файл з віддаленої машини на локальний, скористайтеся scp -P 2222 username@domain:dir/file.ext localdir(припустимо, що file.extвін знаходиться ~/dirна віддаленому комп'ютері, як у вашому прикладі). Якщо ви працюєте scpна віддаленій машині, поверніть на "локальний" і "віддалений".


1
ОП хоче скопіювати з локального на віддалений, дивіться назву ОП.
тердон

На жаль, я думаю, ви праві. Але він, мабуть, робить це назад ...
alexis

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робити все, що потрібно робити на цій машині.
Kusalananda

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 client`Windows

  1. Існує кілька клієнтів для роботи SSH-серверів в Windows, таких як OpenSSH від MS

    MobaSSH

    Сервіс Bitvise SSH

  2. Встановіть один із перерахованих вище серверів та переконайтесь, що порт 22 відкритий за допомогою

    netsh advfirewall брандмауер Додати ім'я правила = "Порт SSH 22" dir = в дії = дозволити протокол = UDP localport = 22

    netsh advfirewall брандмауер Додати ім'я правила = "Порт SSH 22" dir = out action = дозволити протокол = UDP localport = 22

    netsh advfirewall брандмауер Додати ім'я правила = "Порт SSH 22" dir = в дії = дозволити протокол = TCP localport = 22

    netsh advfirewall firewall add name name name = "Порт SSH 22" dir = out action = дозволити протокол = TCP localport = 22

    netsh advfirewall вимкнено всі профілі

  3. Порівняння цих серверів:

    Сервіс Bitvise 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 команди , такі як 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як відображаються диски.

    Використовуйте VM від 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:

"Налаштування системи" -> "Інтернет та мережі" -> "Обмін" -> ENABLE "Віддалений вхід"

Потім це надало адресу ім’я користувача @ ip.


-1

У мене ця проблема була сьогодні на MAC.

Введіть таку команду:

scp /local-file-path/ /-remote-location-path/
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.