Salin input ke clipboard melalui SSH?

33

Ini kasus penggunaan saya:

  • Saya sering terhubung ke komputer lain melalui SSH untuk bekerja dan saya sering perlu menyalin dan menempelkan dokumen / teks dari server ke editor yang berjalan secara lokal untuk menulis contoh dan berbagi teks.
  • Seringkali, jika teksnya cukup kecil, saya cukup menyalin output dari program terminal saya (gnome-terminal saat ini) dan menempelkannya.
  • Namun, ketika menyangkut seluruh dokumen, opsi saya cukup terbatas. Saya bisa menyalin dokumen chunk-by-chunk, atau scpke mesin lokal.

Apakah ada cara untuk menggunakan program seperti xclipyang akan memungkinkan saya untuk menyalin jarak jauh stdinke papan klip server X lokal? Sesuatu untuk efek:

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

akan menjadi hebat. Apakah ada sesuatu yang memungkinkan hal ini terjadi?

Naftuli Kay
sumber

Jawaban:

20

Jika Anda menjalankan ssh dengan penerusan X, ini transparan: perintah jarak jauh (termasuk xclip) memiliki akses ke server X Anda (termasuk keyboard-nya). Pastikan Anda memiliki ForwardX11 yesdi server Anda ~/.ssh/configdan X11Forwarding yesdi server sshd_config(tergantung pada distribusi Anda, opsi ini mungkin hidup atau mati secara default).

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

Ada cara lain untuk mengerjakan file jarak jauh yang mungkin lebih nyaman, misalnya memasang direktori jarak jauh di mesin lokal Anda dengan SSHfs , atau membuka file jarak jauh di Emacs with Tramp . Jika Anda telah mengatur ssh dan FUSE dan SSHfs diinstal, SSHfs semudah mkdir ~/net/myserver; sshfs myserver:/ ~/net/myserver. Jika Anda telah mengatur ssh dan menginstal Emacs, Tramp semudah membuka /myserver:/path/to/file.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
1
Adakah kerentanan keamanan untuk menjalankan hal-hal seperti ini secara default di file conf?
Naftuli Kay
Tidak. Semua lalu lintas x11 diteruskan melalui saluran SSH.
Shadur
2
@TKKocheran Tidak juga. Di sisi server, tidak ada. Di sisi klien, sedikit, dalam hal itu memberikan administrator server jalan ke klien Anda, tetapi dalam 99% kasus admin server masih memiliki cara; lihat Jika seseorang masuk ke SSH di komputer saya, dapatkah saya mengakses komputer mereka?
Gilles 'SO- stop being evil'
7

Anda tidak perlu sesuatu yang istimewa; sejak xclipbekerja stdin, hanya

ssh remotehost xclip < myconf.conf

Mengapa perlu dimodifikasi dengan sed? sshtransparan untuk data saat tidak digunakan sebagai terminal, dan umumnya digunakan dalam jaringan pipa seperti

tar cfz - somedir | ssh remotehost 'cd destdir; tar xfz -'`
geekosaurus
sumber
Apakah ada cara untuk melakukannya dari dalam sesi SSH yang ada? Saya benar-benar lebih suka tidak harus membuka jendela terminal lain jika saya sudah punya satu terbuka ke mesin yang bersangkutan.
Naftuli Kay
Dan sed hanya ada di sana sebagai contoh, jika saya ingin melakukan pemrosesan pada stdinsebelum menyalinnya ke clipboard, saya ingin opsi itu.
Naftuli Kay
Tidak, tidak ada cara untuk menyuntikkan data ke sshsesi yang ada (itu tidak akan sangat aman jika Anda bisa). Anda dapat mengatur ssh ControlMasterhal - hal untuk multiplex koneksi tambahan lebih dari yang sudah ada, tetapi itu tidak benar-benar sesuatu untuk pemula dan Anda masih melakukannya dengan cara yang sama sesudahnya, dengan beralih ke terminal lokal lain dan menjalankan perintah di atas (yang tidak membuka yang baru jendela terminal).
geekosaur
@NaftuliKay Untuk solusi yang bekerja di dalam sesi SSH normal Anda, lihat jawaban saya .
tanius
5

Begini cara Anda melakukannya di OSX dari mesin lokal Anda

ssh remotehost.com "<some/file.txt" | pbcopy
William Casarin
sumber
3

jika mesin lokal Anda menjalankan windows (7+) Anda bisa menggunakan ini dari CommandLine:

ssh user@server cat /home/user/file | clip
d.raev
sumber
1

~ / .ssh / config:

Host REMOTEHOST
    ...
    ForwardX11 yes

/ etc / ssh / sshd_config:

X11Forwarding yes

pesta:

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

Sangat mirip dengan solusi @ d-raev dan @ william-casarin, namun berbeda, jadi saya berbagi apa yang bekerja untuk saya.

Perintah

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

Penjelasan

Ini digunakan sshuntuk membuat terowongan yang aman, masuk ke user@ hostatau ip, kemudian jalankan catuntuk mencetak konten <myconffile.confuntuk stdoutkemudian mengirimkannya ke perintah xclip -sel clippada mesin lokal Anda, yang menempatkan konten <myconffile.confke clipboard pada mesin lokal Anda.

Contoh penggunaan dunia nyata

Saya menggunakan struktur perintah ini untuk tugas-tugas seperti menempelkan kunci ssh ke github (memungkinkan pilihan ctrl-V sederhana atau menempel setelah saya menjalankan perintah) pada dengan Bash di Ubuntu 16.04 dan 18.04. Memeriksa man ssh, man catdan man xclipuntuk perilaku dan pilihan detail.

Jason R Stevens CFA
sumber
Ini bahkan berfungsi untuk menyalin dari server tanpa kepala, di mana xcliptidak akan berjalan karena tidak ada X.
tanius
0

Saya memiliki masalah yang serupa dengan clipboard LUbuntu lxterminal(berbagai terminal yang diuji) menempel pada sshsesi. Jika clipboard memiliki lebih dari sekitar 100 byte, batas waktu sesi dan gagal.

Jika saya terhubung melalui ssh ke hampir semua server CentOS 5.x dan kemudian terhubung ke server target, pasta clipboard berfungsi tanpa masalah untuk ukuran data yang masuk akal.

Vasyl
sumber
0

Menyalin dari server tanpa kepala ke papan klip lokal, dari dalam sesi SSH yang biasa Anda lakukan:

  1. Instal ncatdi mesin lokal dan jarak jauh Anda. (Pada mesin jarak jauh Anda juga dapat Anda lakukan dengan ncatau polos telnet, tetapi pada mesin lokal kami membutuhkan opsi untuk menjalankan perintah ( -c/ -e) yang tidak tersedia di ncdistribusi biasa seperti Debian dan Ubuntu.)

    apt install nmap
    
  2. Di mesin lokal Anda, atur server mendengarkan pada antarmuka lokal yang akan menyalin konten yang masuk pada port 10009 ke papan klip X Anda:

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

    Atau gunakan versi tulisan tangan yang sepadan:

    ncat -klc "xclip -sel c" localhost 10009
    
  3. SSH ke mesin jarak jauh sedemikian rupa sehingga terowongan terbalik dibuat dari port 10008 mesin jarak jauh ke port 10009 pada mesin lokal Anda (di mana server Anda mendengarkan). Anda dapat menggunakan sesi SSH itu untuk pekerjaan normal Anda.

    ssh -R 10008:localhost:10009 [email protected]
    
  4. Saat Anda ingin menyalin konten file dari mesin jarak jauh ke clipboard lokal, jalankan di shell SSH:

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

    Dan tentu saja, itu lebih baik bila dikemas sebagai shell shortcut atau script. Kita bisa menyebutnya rclipuntuk "[copy ke] clipboard jarak jauh" dalam analogi dengan yang terkenal xclip.

Keuntungan

  • Tidak perlu membuka sesi SSH lain ke mesin jarak jauh.

  • Tidak perlu untuk xclippada mesin jarak jauh, jadi itu berfungsi jika Anda tidak dapat menginstalnya atau tidak dapat menggunakannya karena ini adalah server tanpa kepala tanpa X.

Keamanan

Kami melakukannya ncat -l localhost 10009untuk server, yang berarti server hanya mendengarkan antarmuka jaringan dengan localhostalamat IP. Antarmuka loop lokal ini hanya memungkinkan koneksi dari mesin Anda sendiri (termasuk, dalam hal ini, mereka yang melakukan tunnel terbalik melalui SSH). Jadi, bahkan jika Anda tidak berada di belakang firewall, port 10009 Anda tidak terpapar pada siapa pun di Internet.

Sumber

Diadaptasi dari gist dergachev / ssh-forward-clipboard.md untuk bekerja di Linux. Inti itu juga berisi instruksi tentang cara membuat terowongan terbalik SSH sebagai default.

tanius
sumber
-1

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

Anda dapat mengonversi data clipboard Anda dengan teks Base64 ke ASCII. Kemudian Anda dapat mendorongnya melalui koneksi SSH yang sudah ada.

LanceBaynes
sumber
Mengapa pindah agama? Ini sudah teks dalam kasus ini dan bahkan jika itu adalah biner tidak akan ada alasan Anda tidak dapat mengirimnya melalui pipa seperti ini.
Caleb
clipboard dapat berisi data biner, misalnya: aplikasi yang dikompilasi
LanceBaynes
Ya itu bisa, tetapi mengapa itu menjadi masalah? Data biner dapat ditransfer melalui pipa dan ssh tunnel.
Caleb