it-swarm-vi.com

Sao chép một tập tin trở lại hệ thống cục bộ với ssh

Nếu tôi đăng nhập vào hệ thống qua SSH, có cách nào để sao chép tệp trở lại hệ thống cục bộ của tôi mà không kích hoạt thiết bị đầu cuối hoặc phiên màn hình khác và thực hiện scp hoặc một cái gì đó tương tự hoặc không thực hiện SSH từ hệ thống từ xa trở lại hệ thống địa phương?

271
Shawn J. Goff

Kết nối chính

Thật dễ dàng nếu bạn có kế hoạch trước.

Mở kết nối chính lần đầu tiên. Đối với các kết nối tiếp theo, định tuyến các kết nối nô lệ thông qua kết nối chính hiện có. Trong ~/.ssh/config , hãy thiết lập chia sẻ kết nối để tự động xảy ra:

ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r

Nếu bạn bắt đầu một phiên ssh đến cùng (người dùng, cổng, máy) như một kết nối hiện có, phiên thứ hai sẽ được chuyển qua phiên thứ nhất. Thiết lập kết nối thứ hai không yêu cầu xác thực mới và rất nhanh.

Vì vậy, trong khi bạn có kết nối hoạt động của mình, bạn có thể nhanh chóng:

Chuyển tiếp

Trên một kết nối hiện có, bạn có thể thiết lập một đường hầm ssh ngược. Trên dòng lệnh ssh, tạo chuyển tiếp từ xa bằng cách chuyển -R 22042:localhost:22 Trong đó 22042 là số được chọn ngẫu nhiên khác với bất kỳ số cổng nào khác trên máy từ xa. Sau đó ssh -p 22042 localhost Trên máy từ xa kết nối bạn trở lại máy nguồn; bạn có thể sử dụng scp -P 22042 foo localhost: để sao chép tệp.

Bạn có thể tự động hóa điều này hơn nữa với RemoteForward 22042 localhost:22. Vấn đề với điều này là nếu bạn kết nối với cùng một máy tính có nhiều phiên bản ssh hoặc nếu có ai đó đang sử dụng cổng, bạn sẽ không nhận được chuyển tiếp.

Nếu bạn chưa kích hoạt chuyển tiếp từ xa từ đầu, bạn có thể thực hiện trên phiên ssh hiện có. Kiểu Enter ~C Enter -R 22042:localhost:22 Enter. Xem các nhân vật thoát Escape trong hướng dẫn sử dụng để biết thêm thông tin.

Ngoài ra còn có một số thông tin thú vị trong chủ đề Lỗi Máy chủ này .

Sao chép dán

Nếu tệp nhỏ, bạn có thể nhập nó ra và sao chép-dán từ đầu ra thiết bị đầu cuối. Nếu tệp chứa các ký tự không in được, hãy sử dụng mã hóa, chẳng hạn như base64 .

[.__.] remote.example.net $ base64 <myfile [.__.]  (sao chép đầu ra)  [.__.]
[.__.] local.example.net $ base64 -d> myfile [.__.]  (dán nội dung trong bảng tạm)  [.__.]Ctrl+D

Thuận tiện hơn, nếu bạn có X chuyển tiếp hoạt động, sao chép tệp trên máy từ xa và dán cục bộ. Bạn có thể dẫn dữ liệu vào và ra xclip hoặc xsel . Nếu bạn muốn giữ tên tệp và siêu dữ liệu, hãy sao chép-dán một tệp lưu trữ.

remote.example.net$ tar -czf - myfile | xsel
local.example.net$ xsel | tar -xzf -
144

Một cách dễ dàng khác (IMO) sẽ là:

# to remote Host
cat localfile.conf | ssh [email protected] 'cat -> /tmp/remotefile.conf'

# from remote Host
ssh [email protected] 'cat /tmp/remotefile.conf' > /tmp/localfile.conf

Hoặc nếu bạn thích thứ gì đó giống GUI, hãy thử Midnight Commander . Họ gọi tính năng này Shell-Link. Hầu hết các bản phân phối có em trong hệ thống gói của họ là mc.

75
Florian Fida

SSH không hỗ trợ một vài lệnh, thông qua ký tự thoát (~ Theo mặc định):

$ ~?
Supported escape sequences:
  ~.  - terminate connection (and any multiplexed sessions)
  ~B  - send a BREAK to the remote system
  ~C  - open a command line
  ~R  - Request rekey (SSH protocol 2 only)
  ~^Z - suspend ssh
  ~#  - list forwarded connections
  ~&  - background ssh (when waiting for connections to terminate)
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

$ ~C
ssh> help
Commands:
      -L[bind_address:]port:Host:hostport    Request local forward
      -R[bind_address:]port:Host:hostport    Request remote forward
      -D[bind_address:]port                  Request dynamic forward
      -KR[bind_address:]port                 Cancel remote forward
      !args                                  Execute local command

!args Dường như gần nhất với những gì bạn muốn. Lưu ý rằng bạn sẽ cần bật PermitLocalCommand trong tệp /etc/ssh_config Để các lệnh ~C Hoạt động (xem man ssh_config).

Bạn có thể sử dụng lại phiên ssh tương tự nếu bạn thiết lập ControlMaster trong ssh_config. Nếu bạn làm điều này:

$ ~C
ssh> !scp file [email protected]:

về mặt kỹ thuật, bạn chưa bao giờ rời khỏi phiên ssh và không cần xác thực lại. Có lẽ phức tạp hơn bạn muốn, nhưng tôi không thể nghĩ ra một cách dễ dàng khác.

54
Corey Henderson

Đó là tất cả các phương pháp rất phức tạp.
[.__.] Bạn có thể gắn hệ thống tệp từ xa vào máy cục bộ của mình bằng sshfs:

mkdir -p /mnt/sshfs

[email protected]:~# sshfs 192.168.1.2:/ /mnt/sshfs
[email protected]:~# umount /mnt/sshfs

Sau đó, bạn có thể sao chép dán tệp với nautilus, gnome, konqueror, cá heo, bash hoặc bất cứ điều gì.

38
Quandary
  • Sử dụng ssh-xfer , một tác nhân ssh đã sửa đổi, quá tải hiệu quả một kênh bên ssh hiện có để sử dụng chuyển tập tin.
  • Sử dụng zssh , đó là zmodem hiệu quả trên ssh. Nếu bạn đã từng sử dụng rzsz thì điều này có vẻ rất quen thuộc.
  • Đảo ngược (-R, cho từ xa đến cục bộ) hoặc chuyển tiếp (-L, đối với các cổng cục bộ đến từ xa) để chạy chuyển tập tin qua, giả sử bạn có một số trình nền chuyển tập tin đang nghe ở đầu bên kia.

Nhưng không ai trong số này thực sự cần thiết, IMO. Giao thức SSH hỗ trợ nhiều kênh trên một kết nối và ứng dụng khách OpenSSH hỗ trợ ghép kênh. Giả sử bạn có ControlMasterControlPaththiết lập (ControlPersist cũng hữu ích),

# kết nối đầu tiên[.__.] $ ssh từ xa [.__.] [.__.] # sẽ ghép kênh trên cùng một kết nối mà ssh gốc đã mở[.__.] $ sftp từ xa [.__.]
15
ephemient

Một cách tiếp cận thậm chí đơn giản hơn: Mở Filezilla (hoặc trình duyệt ftp yêu thích của bạn), mở kết nối ssh đến cùng một trang, tìm tệp và kéo nó qua cấu trúc tệp cục bộ của bạn. Nếu bạn chưa quen với Filezilla, hãy sử dụng tính năng "trình quản lý trang" để kết nối lại nhanh vào lần tiếp theo.

Vâng, tôi biết điều này là hiển nhiên đối với hầu hết các bạn (và không chính xác tại điểm), nhưng một số người (như tôi), người đã tìm thấy chủ đề này đang tìm kiếm một giải pháp chỉ dành cho thiết bị đầu cuối có thể đã bỏ qua điều hiển nhiên.

9
Larry Jones

Những gì tôi thấy là giải pháp tốt nhất và hiệu quả nhất là sử dụng xclip-copyfilexclip-pastefile.

Trên máy chủ, bạn sử dụng xclip-copyfile để sao chép một hoặc nhiều tệp. Những tập tin này có sẵn trên máy chủ cục bộ của bạn. Ở đó, bạn có thể sử dụng xclip-pastefile.

Điều này bỏ qua nhu cầu sử dụng scp hoặc có máy chủ ssh cục bộ. Tôi sử dụng điều này với cygwin chẳng hạn. Vấn đề duy nhất là điều này yêu cầu cài đặt xclip nếu bạn chưa có nó. Oh, và điều này làm việc với các tập tin nhị phân quá.

8
Robert

Một trong nhiều lý do chúng tôi sử dụng SecureCRT - mặc dù thích phần mềm nguồn mở trong thực tế - là dễ dàng thực hiện chuyển tập tin. Đơn giản là không có sự thay thế trực tiếp trong thế giới F/OSS.

SecureCRT khởi đầu là một chương trình Windows thuần túy vào giữa những năm 1990 nhưng đã được chuyển sang Mac OS X và Linux vài năm trước .

SecureCRT có ba tính năng chính để truyền tệp đến và từ hệ thống mà bạn đang SSH vào:

  • ZModem , YModem , XModem , Kermit và ASCII - SecureCRT là một loại trình giả lập thiết bị đầu cuối trường học cũ, hỗ trợ một số giao thức truyền tệp trong băng tần.

    Dễ sử dụng nhất là ZModem. Khi bạn gõ một cái gì đó như sz file-to-download trên dòng lệnh từ xa, chương trình sz từ xa viết ra một chuỗi thoát báo cho SecureCRT bắt đầu tải xuống ngay lập tức file-to-download vào thư mục tải xuống mặc định.

    Một liên lạc tốt đẹp là thư mục tải xuống có thể tùy chỉnh mỗi phiên. Chúng tôi sử dụng điều này để có các thư mục trên mỗi trang trên máy chủ tệp văn phòng chính của chúng tôi, vì vậy chúng tôi không phải sắp xếp các tệp đã tải xuống theo cách thủ công.

    (sz là chương trình "gửi ZModem", một phần của gói lrzsz . Nó đã được đóng gói cho hầu hết các hệ thống Unixy. Vì hệ thống từ xa của bạn chưa cài đặt xong và bạn không thể dễ dàng cài đặt gói nhị phân, gói nguồn nhỏ và có tính di động cao. Đã hơn một lần, tôi phải gửi một lrzsz"sharchive" hoặc uuencode 'd tarball cho một hệ thống từ xa bị loại bỏ để tôi có thể gửi các tệp ZModem cho nó .)

  • [~ # ~] sftp [~ # ~] - SecureCRT có triển khai SFTP cơ bản được tích hợp chặt chẽ.

    Bằng cách "tích hợp chặt chẽ", ý tôi là khi bạn đưa ra lệnh menu SFTP hoặc phím tắt, nó sẽ mở một tab mới được kết nối với trang web từ xa qua cùng một kết nối SSH. Do đó, bạn không cần phải đăng nhập lại và kết nối được thiết lập nhanh hơn một chút so với khi bạn đã mở một kết nối SFTP riêng cho cùng một máy chủ.

    Tôi mô tả tính năng SFTP là "cơ bản" vì Phần mềm VanDyke có một sản phẩm truyền tệp riêng biệt, SecureFX . Nó có nhiều tính năng hơn ứng dụng khách SFTP tích hợp và cũng tích hợp với SecureCRT.

    Tính năng SFTP của SecureCRT cho phép bạn định cấu hình các thư mục cục bộ và từ xa mặc định tách biệt với cấu hình ZModem.

    Tính năng SFTP này có loại giao diện dòng lệnh cơ bản, bắt chước chương trình sftp của OpenSSH, ngoại trừ việc nó có khả năng chi trả như Tab hoàn thành lệnh. Do đó, lấy một tập tin từ xa gọi là somefile.tar.gz có thể dễ như get soTabEnter.

  • Kéo và thả - Nếu bạn kéo và thả tệp vào cửa sổ đầu cuối, nó sẽ tự động gõ rz cho bạn và bắt đầu gửi tập tin.

    Thay phiên, bạn có thể mở tab SFTP và thả tệp vào tab đó để gửi qua SFTP. Do đó, việc gửi một tệp đến một hệ thống từ xa có thể đơn giản như Alt-P, kéo, thả.

    Chúng tôi thấy rằng việc chuyển tiền diễn ra nhanh hơn rất nhiều thông qua SFTP, có lẽ vì đó là giao thức dựa trên TCP, do đó, nó được hưởng lợi từ các cửa sổ trượt lớn của TCP hiện đại /Ngăn xếp IP . ZModem được thiết kế vào thời mà kích thước khối 64 kiB được coi là "lớn". Do đó, rất nhiều tốc độ tiềm năng trong một liên kết được đưa vào ZModem trong khi mỗi đầu đều chờ xác nhận chuyển khối.

    Một điều thú vị về chế độ hoạt động kéo và thả là nó làm mất một trong những căng thẳng khi sử dụng ZModem. Khi bạn nhập rz tại hệ thống từ xa, SecureCRT sẽ tự động bật trình chọn tệp. Sau đó, bạn có khoảng một phút để tìm và chọn tệp trước khi hết thời gian từ xa. Điều này tạo ra một sự rung cảm chạy đua với đồng hồ không dễ chịu. Kéo và thả cho phép bạn tìm thấy tệp một cách thoải mái, sau đó bắt đầu chuyển bằng một chuyển động nhanh của chuột.

    Chúng tôi vẫn sử dụng phương thức thủ công, bắt đầu chuyển bằng lệnh rz rõ ràng. Điều này là do SecureCRT cho phép bạn định cấu hình thư mục tải lên mỗi phiên, chúng tôi trỏ đến thư mục trên máy chủ tệp luôn chứa bản dựng mới nhất của phần mềm mà trang web từ xa cụ thể đang chạy. Đối với các lần chuyển như vậy, không có cuộc đua với đồng hồ, vì trình chọn tệp mở ở đúng vị trí để bắt đầu.

3
Warren Young

Sử dụng "!" để chuyển đổi tệp thành bản trình bày ASCII của tệp của bạn (ví dụ: ! uuencode myfile.bin >uuencode.dat). Sau đó sử dụng ! cat uuencode.dat >target.dat. Sau đó, sử dụng uudecode ở phía đích: ! uudecode target.dat >myfile.bin

1
Nils