Sao chép đầu vào vào clipboard qua SSH?


33

Đây là trường hợp sử dụng của tôi:

  • Tôi thường kết nối với các máy tính khác qua SSH để làm việc và tôi thường cần sao chép và dán tài liệu / văn bản từ máy chủ sang trình soạn thảo đang chạy cục bộ để viết ví dụ và chia sẻ văn bản.
  • Thông thường, nếu văn bản đủ nhỏ, tôi chỉ cần sao chép đầu ra từ chương trình thiết bị đầu cuối của mình (gnome-terminal vào lúc này) và dán nó.
  • Tuy nhiên, khi nói đến toàn bộ tài liệu, các tùy chọn của tôi khá hạn chế. Tôi có thể sao chép tài liệu từng phần hoặc tài liệu scpvào máy cục bộ.

Có cách nào để sử dụng một chương trình như xclipcho phép tôi sao chép từ xa stdinvào bảng tạm của máy chủ X cục bộ không? Một cái gì đó có tác dụng của:

cat myconffile.conf | sed {...} | copy-over-ssh-to-local-clipboard

sẽ là tuyệt vời Có một cái gì đó tồn tại để làm điều này có thể?

Câu trả lời:


20

Nếu bạn chạy ssh với chuyển tiếp X, thì điều này là trong suốt: các lệnh từ xa (bao gồm xclip) có quyền truy cập vào máy chủ X của bạn (bao gồm cả bàn phím của nó). Đảm bảo rằng bạn có ForwardX11 yestrong ~/.ssh/configX11Forwarding yestrong máy chủ sshd_config(tùy thuộc vào bản phân phối của bạn, các tùy chọn này có thể được bật hoặc tắt theo mặc định).

<myconffile.conf sed {...} | xclip -i

Có nhiều cách khác để làm việc trên các tệp từ xa có thể thuận tiện hơn, ví dụ: gắn các thư mục từ xa trên máy cục bộ của bạn bằng SSHfs hoặc mở các tệp từ xa trong Emacs bằng Tramp . Nếu bạn đã cài đặt ssh và FUSE và SSHfs, SSHfs cũng dễ như vậy mkdir ~/net/myserver; sshfs myserver:/ ~/net/myserver. Nếu bạn đã cài đặt ssh và cài đặt Emacs, Tramp dễ dàng như mở /myserver:/path/to/file.


1
Bất kỳ lỗ hổng bảo mật để chạy mọi thứ theo cách này theo mặc định trong tệp conf?
Naftuli Kay

Không. Tất cả lưu lượng x11 được chuyển tiếp qua kênh SSH.
Shadur

2
@TKKocheran Không hẳn. Về phía máy chủ, không có. Về phía khách hàng, một chút, ở chỗ nó cung cấp cho quản trị viên máy chủ một cách vào máy khách của bạn, nhưng trong 99% trường hợp, quản trị viên máy chủ vẫn có cách; xem Nếu ai đó đã đăng nhập vào SSH trên máy tính của tôi, tôi có thể truy cập vào máy tính của họ không?
Gilles 'SO- ngừng trở nên xấu xa'

7

Bạn không cần bất cứ điều gì đặc biệt; kể từ khi xcliplàm việc xong stdin, chỉ

ssh remotehost xclip < myconf.conf

Tại sao nó cần phải được sửa đổi với sed? sshlà trong suốt đối với dữ liệu khi không được sử dụng làm thiết bị đầu cuối và thường được sử dụng trong các đường ống như

tar cfz - somedir | ssh remotehost 'cd destdir; tar xfz -'`

Có cách nào để làm điều đó từ trong một phiên SSH hiện có không? Tôi thực sự không muốn phải mở một cửa sổ đầu cuối khác nếu tôi đã mở một cái cho máy.
Naftuli Kay

Và sed` chỉ là một ví dụ, nếu tôi muốn thực hiện bất kỳ xử lý nào stdintrước khi sao chép nó vào bảng tạm, tôi muốn tùy chọn đó.
Naftuli Kay

Không, không có cách nào để đưa dữ liệu vào một sshphiên hiện có (sẽ không an toàn nếu bạn có thể). Bạn có thể thiết lập ssh ControlMasternội dung để ghép nhiều kết nối bổ sung so với kết nối hiện có, nhưng nó không thực sự là thứ dành cho người mới bắt đầu và bạn vẫn thực hiện theo cách tương tự sau đó, bằng cách chuyển sang thiết bị đầu cuối cục bộ khác và chạy lệnh ở trên ( không mở một lệnh mới cửa sổ đầu cuối).
geekizard

@NaftuliKay Để biết giải pháp hoạt động trong phiên SSH thông thường của bạn, hãy xem câu trả lời của tôi .
tanius

5

Đây là cách bạn sẽ làm điều đó trên OSX từ máy cục bộ của bạn

ssh remotehost.com "<some/file.txt" | pbcopy

3

nếu máy cục bộ của bạn đang chạy windows (7+), bạn chỉ có thể sử dụng cái này từ CommandLine:

ssh user@server cat /home/user/file | clip

1

~ / .ssh / config:

Host REMOTEHOST
    ...
    ForwardX11 yes

/ etc / ssh / sshd_config:

X11Forwarding yes

bash

$ xclip -o | ssh REMOTEHOST 'DISPLAY=:0 xclip -i'

1

Rất giống với các giải pháp của @ d-raev và @ william-casarin, tuy nhiên, nó khác nhau vì vậy tôi đang chia sẻ những gì hiệu quả với tôi.

Lệnh

ssh user@host "cat <myconffile.conf" | xclip -sel clip

Giải trình

Này được sử dụng sshđể tạo ra một đường hầm an toàn, đăng nhập để user@ hosthoặc ip, sau đó thực hiện catđể in nội dung của <myconffile.confđể stdoutsau đó đường ống đó để lệnh xclip -sel cliptrên máy tính địa phương của bạn, mà đặt các nội dung của <myconffile.confthành clipboard trên máy tính địa phương của bạn.

Sử dụng ví dụ trong thế giới thực

Tôi sử dụng cấu trúc lệnh này cho các tác vụ như dán các khóa ssh vào github (cho phép chọn ctrl-V hoặc dán đơn giản sau khi tôi chạy lệnh) trên Bash trên Ubuntu 16.04 và 18.04. Kiểm tra man ssh, man catman xclipcho hành vi và tùy chọn chi tiết.


Điều này thậm chí hoạt động để sao chép từ các máy chủ không đầu, nơi xclipsẽ không chạy vì không có X.
tanius

0

Tôi gặp vấn đề tương tự với LUbfox lxterminal(đã thử nghiệm nhiều thiết bị đầu cuối) dán bảng tạm vào một sshphiên. Nếu clipboard có hơn 100 byte thì hết thời gian phiên và không thành công.

Nếu tôi kết nối qua ssh với hầu hết mọi máy chủ CentOS 5.x và sau đó kết nối với máy chủ đích, dán clipboard sẽ hoạt động mà không gặp vấn đề gì đối với bất kỳ kích thước dữ liệu hợp lý nào.


0

Sao chép từ máy chủ không đầu vào bảng tạm cục bộ, từ bên trong phiên SSH thông thường của bạn:

  1. Cài đặt ncattrên máy cục bộ và từ xa của bạn. (Trên máy từ xa của bạn, bạn cũng có thể thực hiện với nchoặc đơn giản telnet, nhưng trên máy cục bộ, chúng tôi cần các tùy chọn để thực thi các lệnh ( -c/ -e) không có trong các bản ncphân phối thông thường như Debian và Ubuntu.)

    apt install nmap
    
  2. Trên máy cục bộ của bạn, hãy thiết lập máy chủ lắng nghe trên giao diện cục bộ sẽ sao chép nội dung đến trên cổng 10009 vào bảng tạm X của bạn:

    ncat --keep-open --listen --sh-exec "xclip -selection clipboard" localhost 10009
    

    Hoặc sử dụng phiên bản tốc ký tương đương:

    ncat -klc "xclip -sel c" localhost 10009
    
  3. SSH vào máy từ xa theo cách mà một đường hầm ngược được thiết lập từ cổng 10008 của máy từ xa đến cổng 10009 trên máy cục bộ của bạn (nơi máy chủ của bạn đang lắng nghe). Bạn có thể sử dụng phiên SSH đó cho công việc bình thường của bạn.

    ssh -R 10008:localhost:10009 user@example.com
    
  4. Khi bạn muốn sao chép nội dung của tệp từ máy từ xa sang bảng tạm cục bộ, hãy thực thi trong trình vỏ SSH:

    ncat --send-only localhost 10008 < file.txt
    

    Và tất nhiên, nó đẹp hơn khi được đóng gói như một phím tắt shell hoặc script. Chúng ta có thể gọi nó là rclip"[sao chép vào] bảng tạm từ xa" tương tự như nổi tiếng xclip.

Ưu điểm

  • Không cần phải mở một phiên SSH khác cho máy từ xa.

  • Không cần xcliptrên máy từ xa, vì vậy nó hoạt động nếu bạn không thể cài đặt hoặc không thể sử dụng vì máy chủ không đầu không có X.

Bảo vệ

Chúng tôi làm ncat -l localhost 10009cho máy chủ, có nghĩa là nó chỉ lắng nghe trên giao diện mạng với localhostđịa chỉ IP. Giao diện vòng lặp cục bộ này chỉ cho phép các kết nối từ máy của chính bạn (bao gồm, trong trường hợp này, các kết nối ngược được tạo đường hầm thông qua SSH). Vì vậy, ngay cả khi bạn không đứng sau tường lửa, cổng 10009 của bạn không được tiếp xúc với bất kỳ ai trên Internet.

Nguồn

Được chuyển thể từ ý chính dergachev / ssh-forward-clipboard.md để làm việc cho Linux. Ý chính đó cũng chứa các hướng dẫn về cách làm cho đường hầm đảo ngược SSH trở thành mặc định.


-1

https://secure.wikidia.org/wikipedia/en/wiki/Base64

Bạn có thể chuyển đổi dữ liệu clipboard của mình với văn bản Base64 sang ASCII. Sau đó, bạn có thể đẩy nó qua bên trong một kết nối SSH đã có sẵn.


Tại sao phải chuyển đổi thành bất cứ điều gì? Nó đã nhắn tin trong trường hợp này và ngay cả khi đó là nhị phân, sẽ không có lý do gì bạn không thể gửi nó qua một đường ống như thế này.
Caleb

clipboard có thể chứa dữ liệu nhị phân, ví dụ: một ứng dụng được biên dịch
LanceBaynes

Vâng, nó có thể, nhưng tại sao điều đó sẽ là một vấn đề? Dữ liệu nhị phân có thể được truyền qua một đường hầm ống và ssh.
Caleb
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.