Copia input negli appunti su SSH?


33

Ecco il mio caso d'uso:

  • Sono spesso connesso ad altri computer tramite SSH per lavoro e spesso ho bisogno di copiare e incollare documenti / testo dal server in editor locali per scrivere esempi e condividere testo.
  • Spesso, se il testo è abbastanza piccolo, copierò semplicemente l'output dal mio programma terminale (gnome-terminal al momento) e lo incollerò.
  • Tuttavia, quando si tratta di interi documenti, le mie opzioni sono piuttosto limitate. Posso copiare il documento pezzo per pezzo o scpsul computer locale.

C'è un modo per usare un programma come quello xclipche mi permetterà di copiare in remoto stdinnegli appunti del server X locale? Qualcosa per l'effetto di:

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

sarebbe fantastico. Esiste qualcosa per renderlo possibile?

Risposte:


20

Se esegui ssh con X forwarding, questo è trasparente: i comandi remoti (incluso xclip) hanno accesso al tuo server X (inclusa la sua tastiera). Assicurati di avere ForwardX11 yesnel tuo ~/.ssh/confige X11Forwarding yesnel server sshd_config(a seconda delle tue distribuzioni, queste opzioni potrebbero essere attivate o disattivate per impostazione predefinita).

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

Esistono altri modi di lavorare su file remoti che potrebbero essere più convenienti, ad esempio montare directory remote sul tuo computer locale con SSHfs o aprire file remoti in Emacs con Tramp . Se hai installato ssh e FUSE e SSHfs installato, SSHfs è facile come mkdir ~/net/myserver; sshfs myserver:/ ~/net/myserver. Se hai installato ssh ed Emacs installato, Tramp è facile come aprire /myserver:/path/to/file.


1
Qualche vulnerabilità di sicurezza nell'esecuzione delle cose in questo modo per impostazione predefinita nel file conf?
Naftuli Kay,

No. Tutto il traffico x11 viene inoltrato attraverso il canale SSH.
Shadur,

2
@TKKocheran Non proprio. Sul lato server, nessuno. Sul lato client, un po ', in quanto offre all'amministratore del server un modo per entrare nel tuo client, ma nel 99% dei casi l'amministratore del server ha comunque un modo; vedi Se qualcuno ha effettuato l'accesso a SSH sul mio computer, posso accedere al suo computer?
Gilles 'SO- smetti di essere malvagio' il

7

Non hai bisogno di niente di speciale; dal momento che xclipfunziona stdin, solo

ssh remotehost xclip < myconf.conf

Perché dovrebbe essere modificato con sed? sshè trasparente ai dati quando non viene utilizzato come terminale e viene comunemente utilizzato in condutture come

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

C'è un modo per farlo dall'interno di una sessione SSH esistente? Preferirei davvero non dover aprire un'altra finestra del terminale se ne ho già uno aperto sulla macchina in questione.
Naftuli Kay,

E sed` è proprio lì come esempio, se mi piacerebbe eseguire qualsiasi elaborazione stdinprima di copiarla negli appunti, mi piacerebbe quell'opzione.
Naftuli Kay,

No, non c'è modo di inserire dati in una sshsessione esistente (non sarebbe molto sicuro se potessi). Puoi impostare le ssh ControlMastercose per multiplexare connessioni aggiuntive su una esistente, ma non è davvero qualcosa per i principianti e lo fai ancora allo stesso modo in seguito, passando a un altro terminale locale ed eseguendo il comando sopra (che non apre un nuovo finestra terminale).
Geekosaur,

@NaftuliKay Per una soluzione che funziona all'interno della normale sessione SSH, vedi la mia risposta .
tanius

5

Ecco come lo faresti su OSX dal tuo computer locale

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

3

se il tuo computer locale esegue Windows (7+), puoi semplicemente usarlo da 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

Molto simile alle soluzioni di @ d-raev e @ william-casarin, tuttavia, è diverso, quindi condivido ciò che ha funzionato per me.

Il comando

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

Spiegazione

Questo sta usando sshper creare un tunnel sicuro, accedi a user@ hosto ip, quindi esegui catper stampare il contenuto di <myconffile.confe stdoutpoi reindirizzarlo al comando xclip -sel clipsul tuo computer locale, che posiziona il contenuto <myconffile.confnegli appunti sul tuo computer locale.

Esempio di utilizzo nel mondo reale

Uso questa struttura di comandi per compiti come incollare le chiavi ssh in github (permettendo un semplice ctrl-V o incollare la selezione dopo aver eseguito il comando) su Bash su Ubuntu 16.04 e 18.04. Scopri man ssh, man cate man xclipper il comportamento e opzionali dettagli.


Questo funziona anche per la copia da server senza testa, dove xclipnon funzionerà perché non c'è X.
tanius

0

Ho un problema simile con gli appunti di LUbuntu lxterminal(testati vari terminali) incollando una sshsessione. Se gli Appunti hanno più di circa 100 byte, la sessione scade e fallisce.

Se mi connetto via ssh a quasi tutti i server CentOS 5.x e quindi mi connetto al server di destinazione, la funzione Clipboard paste funziona senza problemi per qualsiasi dimensione di dati ragionevole.


0

Copia da un server senza testa negli appunti locali, dall'interno della solita sessione SSH:

  1. Installa ncatsul tuo computer locale e remoto. (Sul tuo computer remoto puoi anche fare con nco semplicemente telnet, ma sul computer locale abbiamo bisogno delle opzioni per eseguire comandi ( -c/ -e) che non sono disponibili ncnelle normali distribuzioni come Debian e Ubuntu.)

    apt install nmap
    
  2. Sul tuo computer locale, imposta un server in ascolto sull'interfaccia locale che copierà il contenuto in arrivo sulla porta 10009 negli Appunti X:

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

    Oppure usa la versione abbreviata equivalente:

    ncat -klc "xclip -sel c" localhost 10009
    
  3. SSH nel computer remoto in modo tale da stabilire un tunnel inverso dalla porta 10008 del computer remoto alla porta 10009 sul computer locale (in cui il server è in ascolto). È possibile utilizzare quella sessione SSH per il normale lavoro.

    ssh -R 10008:localhost:10009 user@example.com
    
  4. Quando si desidera copiare il contenuto di un file dalla macchina remota negli Appunti locali, eseguire nella shell SSH:

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

    E, naturalmente, è più bello se confezionato come scorciatoia da shell o script. Potremmo chiamarlo rclipper "[copia negli] appunti remoti" in analogia al noto xclip.

vantaggi

  • Non è necessario aprire un'altra sessione SSH sul computer remoto.

  • Non è necessario xclipsul computer remoto, quindi funziona se non puoi installarlo o non puoi usarlo perché è un server senza testa senza X.

Sicurezza

Facciamo ncat -l localhost 10009per il server, il che significa che è in ascolto solo sull'interfaccia di rete con l' localhostindirizzo IP. Questa interfaccia di loop locale consente solo connessioni dalla propria macchina (comprese, in questo caso, quelle inverse tramite tunnel SSH). Quindi, anche se non sei protetto da un firewall, la tua porta 10009 non è esposta a nessuno su Internet.

fonte

Adattato dal gergo dergachev / ssh-forward-clipboard.md per lavorare con Linux. Questa sintesi contiene anche istruzioni su come rendere predefinito il tunnel inverso SSH.


-1

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

È possibile convertire i dati degli Appunti con Base64 in testo ASCII. Quindi puoi farlo passare all'interno di una connessione SSH già esistente.


Perché convertirsi in qualcosa? In questo caso è già testo e anche se fosse binario non ci sarebbe motivo per cui non potresti inviarlo attraverso una pipeline come questa.
Caleb,

Gli Appunti potrebbero contenere dati binari, ad esempio un'applicazione compilata
LanceBaynes,

Sì, potrebbe, ma perché sarebbe un problema? I dati binari possono essere trasferiti attraverso un tunnel pipe e ssh.
Caleb,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.