Sử dụng scp để chuyển tệp từ thư mục cục bộ X sang thư mục Y từ xa


99

Tôi đã xem qua các câu hỏi khác ở đây và tại các hướng dẫn "sử dụng scp" khác nhau trên Internet, nhưng tôi không thể phân loại được điều gì sai.

Tôi đang sử dụng Linux Mint và tôi đang cố gắng tìm ra cách hoạt động của scp .

Tôi có một tệp file.ext (trên máy tính của tôi) trong thư mục / home / name / dir /

Tôi kết nối với một máy từ xa bằng ssh , như:

ssh -p 2222 username@domain

Nó hỏi tôi mật khẩu và vỏ hiển thị:

username@domain ~ $

Bây giờ, nếu tôi phát lệnh (trước khi tôi chạy ssh, tôi đã ở trong thư mục cục bộ / home / name / dir ):

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

đầu ra là:

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

Kết quả tương tự nếu thay vì file.ext tôi viết đường dẫn đầy đủ

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

Ngoài ra, quản trị viên máy chủ nói với tôi rằng tôi sẽ tải tệp lên thư mục chính từ xa (thay vì root), như:

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

nhưng khi tôi làm điều đó và nhấn "Enter" thì không có gì xảy ra, vì nếu shell đang chờ thêm đầu vào.

Tóm tắt các vấn đề của tôi:

  • cp: không có tập tin hoặc thư mục như vậy
  • vỏ "kẹt" trên ~ /

Bất kỳ đề xuất?


Không rõ liệu vấn đề của bạn chỉ liên quan đến việc sử dụng sai máy hay không ... bạn có thể vui lòng thêm tiền tố vào mỗi lệnh với máy chủ bạn đang chạy không? ví dụ: localuser@machineA: ssh -p 2222 username@domain(để chỉ ra rằng bạn đang chạy lệnh ssh với tư cách là người dùng cục bộ trên
máyA

1
Khi sử dụng scp, phía từ xa luôn phải chứa dấu hai chấm (ví dụ remotehost:/tmp), nếu không, nó sẽ chỉ thực hiện một bản sao thông thường ( scp /tmp/foo.txt example.comsẽ sao chép /tmp/foo.txtvào một tệp cục bộ example.com)
umläute

xóa -rcờ, vì điều này là không cần thiết để sao chép các tệp đơn lẻ (nó được sử dụng để sao chép đệ quy các thư mục)
umläute

Bạn đang ban hành lệnh scp bên trong phiên sshe ? Nó sẽ có ý nghĩa nếu bạn đang ở trên máy cục bộ.
alexis

Câu trả lời:


119

Bạn cần chạy scplệnh từ máy cục bộ, không phải trên điều khiển từ xa. Bạn hoàn toàn không cần ssh:

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

Bạn cũng không cần -r:

 -r      Recursively copy entire directories.  

Nếu bạn đã đăng nhập vào máy từ xa và muốn sao chép từ cục bộ của mình, bạn cần đảm bảo rằng máy cục bộ của bạn có thể truy cập qua internet và đã sshthiết lập. Tôi không nghĩ đây là những gì bạn đang theo đuổi nhưng nếu có, chỉ cần chạy nó từ xa:

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

1
cảm ơn. vấn đề là tôi đã thử chạy scp trong phiên ssh. bây giờ nó hoạt động
dragonmnl

28

Tôi cung cấp hai phương pháp tải lên / xuống giữa máy từ xa và máy cục bộ (tôi sử dụng Mac air):

Trong trường hợp này, tôi muốn tăng / giảm "11.jpeg" giữa cục bộ và từ xa:

1.

Sao chép tệp trên dịch vụ vào thư mục cục bộ: Bạn phải ở trong bash terminal cục bộ để thực hiện lệnh này, không phải khi bạn ở trong ssh!

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

sao chép các tập tin trong thư mục cục bộ sang dịch vụ từ xa: bạn cũng phải ở trong bash terminal cục bộ

scp /Users/username/Desktop/11.jpeg username@domain:/home/xxx/xxx
  1. Để đạt được ý định tương tự khi bạn đăng nhập SSH , trước tiên bạn phải đặt Tùy chọn hệ thống của >> chia sẻ> đăng nhập từ xa> tất cả người dùng (Tôi không chắc bạn có phải đặt cho "tất cả người dùng" hay không, nhưng nó hoạt động trong tình huống này ) Máy Mac sẽ cho bạn biết "Để đăng nhập vào máy tính này từ xa, hãy nhập: ssh username @ xxxxxx, sau đó nhập lệnh dưới đây:

    tên người dùng scp @ domain: /home/xxx/xxx/11.jpeg tên người dùng @ xxxxxx: / Users / username / Desktop /

Lệnh này ở trên là để tải tệp từ xa sang cục bộ khi bạn đang đăng nhập vào ssh, Chỉ cần thay đổi hai đường dẫn khi bạn muốn tải tệp lên.


Cuối cùng, tôi thấy Filezilla có lẽ là tiện lợi nhất trong công việc hàng ngày ~ ~
maizer

5

Nếu bạn đang chạy lệnh scp này trên máy từ xa, thì nó đang tìm kiếm file.extdưới dạng tệp "cục bộ", tức là trên máy từ xa.

Để sao chép một tập tin từ máy từ xa sang máy cục bộ, hãy sử dụng scp -P 2222 username@domain:dir/file.ext localdir(giả sử đó file.ext~/dirtrên máy tính từ xa, như trong ví dụ của bạn). Nếu bạn chạy scptrên máy từ xa, đảo ngược "cục bộ" và "từ xa".


1
OP muốn sao chép từ cục bộ sang từ xa, xem tiêu đề của OP.
terdon

Rất tiếc, tôi đoán bạn đúng. Nhưng rõ ràng là anh ta đang làm điều đó ngược lại ...
alexis

3

Sử dụng scplệnh

Nếu bạn muốn chuyển một thư mục, chỉ cần zipnó trước, chúng ta có thể unzipsau đó.

Từ máy tính của bạn, chạy này:

$ scp your_path_to_the_file/the_file root@10.145.198.100:~/

Đây rootlà tài khoản của bạn và 10.145.198.100là địa chỉ IP của máy chủ từ xa. Chúng tôi sẽ sao chép the_filevào ~/thư mục trong điều khiển từ xa.

Giải nén tập tin:

$ unzip the_zip_file.zip -d destination_folder

Tại sao rootthậm chí có quyền truy cập SSH trên máy từ xa? Điều đó khá không an toàn. Tốt hơn là sử dụng một cách sử dụng thông thường và sau đó sudođể làm bất cứ điều gì root phải làm trên máy đó.
Kusalananda

1

Chỉ cần một đóng góp nhỏ, có lẽ nó có thể giúp những người mới bắt đầu như tôi: đường dẫn đến thư mục từ xa nên được viết như thế này: username@domain:~/remote_directory

Điều tôi muốn nhấn mạnh ở đây là chúng ta nên luôn luôn thêm rằng :~/


0

Giải pháp để sao chép tập tin từ Linux clientđếnLinux Server

  1. Kiểm tra nếu sshdđang chạy trên máy chủ của bạn bằng cách sử dụng: ps aux | grep sshd

  2. Nếu không cài đặt OpenSSHbằng sudo apt-get install openssh-server openssh-client https://www.tecmint.com/install-openssh-server-in-linux/

  3. Khởi động lại máy chủ của bạn và xác minh rằng sshdđang chạy bằng ps aux | grep sshd

  4. Nếu bạn cần, bạn có thể định cấu hình /etc/ssh/sshd_configtệp của mình , nhưng không cần thiết cho các cấu hình đơn giản

  5. xác minh rằng các cổng đang mở bằng cách sử dụng netcat nc -v -z 127.0.0.1 22

  6. Để sao chép tệp từ Linuxmáy khách sang Linuxmáy khách, hãy sử dụng scp như sau scp ~/filename.md username@10.22.33.45:~/folder/filename.md

  7. Để xác minh rằng tập tin đã được sao chép sử dụng ssh username@10.22.33.45và cung cấp mật khẩu của bạn.

Giải pháp sao chép các tập tin từ Linux client`Windows

  1. Có nhiều máy khách để chạy các máy chủ SSH trên Windows, chẳng hạn như OpenSSH từ MS

    MobaSSH

    Máy chủ Bitvise SSH

  2. Cài đặt một trong các máy chủ ở trên và đảm bảo rằng cổng 22 đang mở bằng cách sử dụng

    tường lửa Netsh advfirewall thêm quy tắc name = "SSH Port 22" dir = in action = allow Protocol = UDP localport = 22

    tường lửa Netsh advfirewall thêm quy tắc name = "SSH Port 22" dir = out action = allow Protocol = UDP localport = 22

    tường lửa Netsh advfirewall thêm quy tắc name = "SSH Port 22" dir = in action = allow Protocol = TCP localport = 22

    tường lửa Netsh advfirewall thêm quy tắc name = "SSH Port 22" dir = out action = allow Protocol = TCP localport = 22

    Netsh advfirewall đặt trạng thái allprofiles tắt

  3. So sánh các máy chủ này:

    Máy chủ Bitvise SSH

    1. Cung cấp gần như gần với cmddấu nhắc gốc , powershelldấu nhắc, tự động hoàn thành

    2. Cung cấp các khả năng bổ sung để tùy chỉnh, nếu bạn cần sử dụng nâng cao

    3. Người dùng tuỳ biến cho các nhu cầu đơn giản là 0. Tôi đã bắt đầu vào nó trong vòng 2 phút, sau khi đã dành rất nhiều thời gian cố gắng để có được MobaSSHOpenSSHđể làm việc.

    4. Để sao chép tập tin bằng scp, hãy sử dụng: scp ~/filename.md username@10.33.44.45:/C/Users/username/filename.md

    5. Miễn phí cho sử dụng cá nhân, $ 99 cho sử dụng chuyên nghiệp. Do có nhiều tính năng và tích hợp tuyệt vời, giá cả rất đáng đồng tiền

    MobaSSH:

    1. cung cấp một vỏ linux trên cửa sổ nơi linux đơn giản lệnh như ls, cp, findvv làm việc, tương tự nhưMINGW64

    2. bạn có thể truy cập cmdpowershelltrực tiếp bằng cách gõ cmdhoặc powershell

    3. Hỗ trợ Unicode kém. Mã hóa không đúng. Ví dụ, nếu bạn cố gắng để bắt đầu Pythonthông dịch, nó sẽ sụp đổ. Bạn sẽ cần thay đổi mã hóa theo cách thủ công bằng cách sử dụng ( https://stackoverflow.com/a/12834315/4752883 ): chcp 65001 set PYTHONIOENCONDING=utf-8 và sau đó khởi động nhắc nhở Python

    4. Những điều tuyệt vời về MobaSSH là nó có một giao diện người dùng rất đơn giản, và scpsshvà tích hợp tốt. Vì vậy, sẽ làm việc cho các trường hợp sử dụng đơn giản

    5. Để sao chép các tệp từ Linuxmáy khách sang Windowsmáy chủ đang chạy MobaSSH: sử dụng scp ~/filename.md username@10.33.44.45:/cygdrive/c/Users/username/filename.md Điều này là do MobaSSHdựa trên cygwinvà các ổ đĩa của nó được ánh xạ tới cùng một cách cygwin- các ổ đĩa được ánh xạ.

    Sử dụng máy ảo từ Microsoft với OpenSSHv6.7 được cài đặt từ https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/ , OpenSSHv6.7 đã được cài đặt.

    1. Nó rất có lỗi, và bạn sẽ cần phải tùy chỉnh rất nhiều.

    2. Hoàn thành lệnh không hoạt động

    3. Nó sẽ để lại khoảng trống khi bạn di chuyển con trỏ trên thiết bị đầu cuối

    4. Python không hoạt động

    5. Các phiên bản sau của OpenSSH, có thể đã được cải thiện về nó. Hơn nữa MS dường như cung cấp OpenSSH thông qua Optional Features https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/


-1

Nếu bạn tình cờ ở trên OSX ...

Khi tôi thử chạy nó với tên người dùng @ local: / file_directory ...

Tôi đã nhận được lỗi sau:

ssh: local: node name or service name not known

Giải pháp

Trên máy Mac của tôi, tôi phải làm như sau để thiết lập cục bộ ssh:

'Tùy chọn hệ thống' -> 'Internet & Mạng' -> 'Chia sẻ' -> ENABLE 'Đăng nhập từ xa'

Điều này sau đó cung cấp tên người dùng @ địa chỉ ip.


-1

Tôi đã có vấn đề tương tự ngày hôm nay trên MAC.

Gõ lệnh sau:

scp /local-file-path/ /-remote-location-path/
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.