linux - How to send data to local clipboard from a remote SSH session

ID : 20001

viewed : 26

Tags : linuxmacosunixshellclipboardlinux

Top 5 Answer for linux - How to send data to local clipboard from a remote SSH session

vote vote

90

My favorite way is ssh [remote-machine] "cat log.txt" | xclip -selection c. This is most useful when you don't want to (or can't) ssh from remote to local.

Edit: on Cygwin ssh [remote-machine] "cat log.txt" > /dev/clipboard.

Edit: A helpful comment from nbren12:

It is almost always possible to setup a reverse ssh connection using SSH port forwarding. Just add RemoteForward 127.0.0.1:2222 127.0.0.1:22 to the server's entry in your local .ssh/config, and then execute ssh -p 2222 127.0.0.1 on the remote machine, which will then redirect the connection to the local machine. – nbren12

vote vote

82

I'm resurrecting this thread because I've been looking for the same kind of solution, and I've found one that works for me. It's a minor modification to a suggestion from OSX Daily.

In my case, I use Terminal on my local OSX machine to connect to a linux server via SSH. Like the OP, I wanted to be able to transfer small bits of text from terminal to my local clipboard, using only the keyboard.

The essence of the solution:

commandThatMakesOutput | ssh desktop pbcopy 

When run in an ssh session to a remote computer, this command takes the output of commandThatMakesOutput (e.g. ls, pwd) and pipes the output to the clipboard of the local computer (the name or IP of "desktop"). In other words, it uses nested ssh: you're connected to the remote computer via one ssh session, you execute the command there, and the remote computer connects to your desktop via a different ssh session and puts the text to your clipboard.

It requires your desktop to be configured as an ssh server (which I leave to you and google). It's much easier if you've set up ssh keys to facilitate fast ssh usage, preferably using a per-session passphrase, or whatever your security needs require.

Other examples:

ls  | ssh desktopIpAddress pbcopy pwd |  ssh desktopIpAddress pbcopy 

For convenience, I've created a bash file to shorten the text required after the pipe:

#!/bin/bash ssh desktop pbcopy 

In my case, i'm using a specially named key

I saved it with the file name cb (my mnemonic (ClipBoard). Put the script somewhere in your path, make it executable and voila:

ls | cb 
vote vote

79

Found a great solution that doesn't require a reverse ssh connection!

You can use xclip on the remote host, along with ssh X11 forwarding & XQuartz on the OSX system.

To set this up:

  1. Install XQuartz (I did this with soloist + pivotal_workstation::xquartz recipe, but you don't have to)
  2. Run XQuartz.app
  3. Open XQuartz Preferences (kb_command+,)
  4. Make sure "Enable Syncing" and "Update Pasteboard when CLIPBOARD changes" are checked XQuartz Preferences window example
  5. ssh -X remote-host "echo 'hello from remote-host' | xclip -selection clipboard"
vote vote

68

Reverse tunnel port on ssh server

All the existing solutions either need:

  • X11 on the client (if you have it, xclip on the server works great) or
  • the client and server to be in the same network (which is not the case if you're at work trying to access your home computer).

Here's another way to do it, though you'll need to modify how you ssh into your computer.

I've started using this and it's nowhere near as intimidating as it looks so give it a try.

Client (ssh session startup)

ssh username@server.com -R 2000:localhost:2000 

(hint: make this a keybinding so you don't have to type it)

Client (another tab)

nc -l 2000 | pbcopy 

Note: if you don't have pbcopy then just tee it to a file.

Server (inside SSH session)

cat some_useful_content.txt | nc localhost 2000 

Other notes

Actually even if you're in the middle of an ssh session there's a way to start a tunnel but i don’t want to scare people away from what really isn’t as bad as it looks. But I'll add the details later if I see any interest

vote vote

58

There are various tools to access X11 selections, including xclip and XSel. Note that X11 traditionally has multiple selections, and most programs have some understanding of both the clipboard and primary selection (which are not the same). Emacs can work with the secondary selection too, but that's rare, and nobody really knows what to do with cut buffers...

 $ xclip -help Usage: xclip [OPTION] [FILE]... Access an X server selection for reading or writing.    -i, -in          read text into X selection from standard input or files                    (default)   -o, -out         prints the selection to standard out (generally for                    piping to a file or program)   -l, -loops       number of selection requests to wait for before exiting   -d, -display     X display to connect to (eg localhost:0")   -h, -help        usage information       -selection   selection to access ("primary", "secondary", "clipboard" or "buffer-cut")       -noutf8      don't treat text as utf-8, use old unicode       -version     version information       -silent      errors only, run in background (default)       -quiet       run in foreground, show what's happening       -verbose     running commentary  Report bugs to <astrand@lysator.liu.se> 
 $ xsel -help Usage: xsel [options] Manipulate the X selection.  By default the current selection is output and not modified if both standard input and standard output are terminals (ttys).  Otherwise, the current selection is output if standard output is not a terminal (tty), and the selection is set from standard input if standard input is not a terminal (tty). If any input or output options are given then the program behaves only in the requested mode.  If both input and output is required then the previous selection is output before being replaced by the contents of standard input.  Input options   -a, --append          Append standard input to the selection   -f, --follow          Append to selection as standard input grows   -i, --input           Read standard input into the selection  Output options   -o, --output          Write the selection to standard output  Action options   -c, --clear           Clear the selection   -d, --delete          Request that the selection be cleared and that                         the application owning it delete its contents  Selection options   -p, --primary         Operate on the PRIMARY selection (default)   -s, --secondary       Operate on the SECONDARY selection   -b, --clipboard       Operate on the CLIPBOARD selection    -k, --keep            Do not modify the selections, but make the PRIMARY                         and SECONDARY selections persist even after the                         programs they were selected in exit.   -x, --exchange        Exchange the PRIMARY and SECONDARY selections  X options   --display displayname                         Specify the connection to the X server   -t ms, --selectionTimeout ms                         Specify the timeout in milliseconds within which the                         selection must be retrieved. A value of 0 (zero)                         specifies no timeout (default)  Miscellaneous options   -l, --logfile         Specify file to log errors to when detached.   -n, --nodetach        Do not detach from the controlling terminal. Without                         this option, xsel will fork to become a background                         process in input, exchange and keep modes.    -h, --help            Display this help and exit   -v, --verbose         Print informative messages   --version             Output version information and exit  Please report bugs to <conrad@vergenet.net>. 

In short, you should try xclip -i/xclip -o or xclip -i -sel clip/xclip -o -sel clip or xsel -i/xsel -o or xsel -i -b/xsel -o -b, depending on what you want.

Top 3 video Explaining linux - How to send data to local clipboard from a remote SSH session

Related QUESTION?