从远程SSH会话获取本地剪贴板上的项目

边界ServerFault的问题,但我正在编程一些shell脚本,所以我在这里先试试:)

大多数* nixes有一个命令,可以让你pipe道/redirect输出到本地剪贴板/粘贴板,并从相同的检索。 在OS X上,这些命令是

pbcopy, pbpaste 

无论如何要复制这个function,而SSH到另一台服务器? 那是,

  1. 我正在使用电脑A.
  2. 我打开一个terminal窗口
  3. 我SSH到计算机B
  4. 我在计算机B上运行一个命令
  5. 计算机B的输出被redirect或自动复制到计算机A的剪贴板。

是的,我知道我可以(不寒而栗)使用我的鼠标从命令中select文本,但是我已经习惯了将输出直接输出到剪贴板的工作stream程,我希望远程会话也一样。

代码是有用的,但一般的方法,以及赞赏。

我正在复活这个线程,因为我一直在寻找同样的解决scheme,而且我find了一个适用于我的解决scheme。 这是对OSX Daily的build议的一个小修改。

就我而言,我使用本地OSX机器上的Terminal通过SSH连接到一个linux服务器。 和OP一样,我希望能够仅使用键盘将less量文本从terminal传输到本地剪贴板。

解决scheme的本质:

 commandThatMakesOutput | ssh desktop pbcopy 

当在ssh会话中运行到远程计算机时,该命令将输出commandThatMakesOutput (例如ls,pwd)并将输出传送到本地计算机的剪贴板(“desktop”的名称或IP)。 换句话说,它使用嵌套的ssh:通过一个ssh会话连接到远程计算机,在那里执行命令,远程计算机通过不同的ssh会话连接到桌面,并将文本放到剪贴板中。

它需要你的桌面被configuration为一个SSH服务器(我离开你和谷歌)。 如果您已经设置了ssh密钥以方便快速使用ssh,最好使用每会话密码或无论您的安全需求如何,都会更容易。

其他例子:

 ls | ssh desktopIpAddress pbcopy pwd | ssh desktopIpAddress pbcopy 

为了方便起见,我创build了一个bash文件来缩短pipe道后所需的文本:

 #!/bin/bash ssh desktop pbcopy 

在我的情况下,我使用了一个特殊的密钥

我用文件名cb (我的助记符(ClipBoard))保存它,把脚本放在你的path中,使它成为可执行文件,然后:

 ls | cb 

我最喜欢的方式是ssh [remote-machine] "cat log.txt" | xclip -selection c ssh [remote-machine] "cat log.txt" | xclip -selection c 。 当你不想(或不能)从远程到本地SSH时,这是最有用的。

编辑:在Cygwin ssh [remote-machine] "cat log.txt" > /dev/clipboard

find了一个不需要反向SSH连接的优秀解决scheme!

您可以在远程主机上使用xclip,以及在OSX系统上使用ssh X11转发和XQuartz。

设置这个:

  1. 安装XQuartz (我用独奏+ pivotal_workstation :: xquartz食谱做了这个,但是你不需要)
  2. 运行XQuartz.app
  3. 打开XQuartz首选项( kb_command + ,
  4. 确保选中“启用同步”“更新剪贴板时更新粘贴板” XQuartz首选项窗口示例
  5. ssh -X remote-host "echo 'hello from remote-host' | xclip -selection clipboard"

有各种工具可以访问X11选项,包括xclip和XSel 。 请注意,X11传统上有多个select,大多数程序都有一些剪贴板和主要select(这是不一样的)的理解。 Emacs也可以使用辅助select,但这很less见,没有人真正知道如何使用剪切缓冲区。

 $ xclip -help
用法:xclip [OPTION] [FILE] ...
访问用于读取或写入的X服务器选项。

   -i,将文本读入标准input或文件中的X选项
                    (默认)
   -o,-out将select打印出来(通常为
                   pipe道到文件或程序)
   -l,退出之前等待的select请求的数量
   -d,显示X显示连接(例如localhost:0“)
   -h,-help使用信息
       - select访问(“主要”,“次要”,“剪贴板”或“缓冲区切割”)
       -noutf8不把文本当作utf-8,使用旧的unicode
      版本信息
       - 仅限安静错误,在后台运行(默认)
       - 在前台安静地跑,展示发生了什么
       - 运行的评论

将错误报告给<astrand@lysator.liu.se>
 $ xsel -help
用法:xsel [options]
操纵Xselect。

默认情况下,当前的select是输出,如果两者都没有修改
标准input和标准输出是terminal(ttys)。 除此以外,
如果标准输出不是terminal,则输出当前select
 (tty),如果标准input,则从标准input设置select
不是terminal(tty)。 如果有任何input或输出选项的话
该程序只在请求的模式下运行。

如果需要input和输出,那么先前的select是
输出之前被标准input的内容replace。

input选项
   -a,--append将标准input附加到select
   -f,--follow追加到标准input增长的select
   -i,--input将标准input读入select

输出选项
   -o,--output将select内容写入标准输出

操作选项
   -c,--clear清除select
   -d,--delete请求清除选项
                        拥有它的应用程序删除其内容

select选项
   -p,--primary在PRIMARY选项上操作(默认)
   -s,--secondary在SECONDARY选项上运行
   -b,--clipboard在CLIPBOARD选项上进行操作

   -k,--keep不要修改select,但要做主
                        和次要的select甚至在之后依然存在
                        他们在退出时select的程序。
   -x,--exchange交换PRIMARY和SECONDARYselect

 X选项
   -  display displayname
                        指定到X服务器的连接
   -t ms,--selectionTimeout ms
                        指定以毫秒为单位的超时
                        必须检索select。 值为0(零)
                        指定不超时(默认)

其他选项
   -l,--logfile指定将错误logging到分离的文件。
   -n,--nodetach请勿脱离控制terminal。 没有
                        这个选项,xsel将fork成为后台
                        处理input,交换和保持模式。

   -h,--help显示此帮助并退出
   -v,--verbose打印内容丰富的消息
   --version输出版本信息并退出

请将错误报告给<conrad@vergenet.net>。

总之,您应该尝试xclip -i / xclip -oxclip -i -sel clip / xclip -o -sel clipxsel -i / xsel -oxsel -i -b / xsel -o -b ,具体取决于你想要什么。

如果Tooltalk可用于这两个系统,您可以编写一个简单的Tooltalk应用程序来执行您想要的操作。

@rhileighalmgren解决scheme是好的,但pbcopy会烦人地复制最后的“\ n”字符,我用“头”去掉最后一个字符,以防止这种情况:

 #!/bin/bash head -c -1 | ssh desktop pbcopy 

我的完整解决scheme在这里: http : //taylor.woodstitch.com/linux/copy-local-clipboard-remote-ssh-server/

这是我的解决scheme,基于SSH反向隧道,netcat和xclip。

首先在工作站上创build脚本(例如clipboard-daemon.sh):

 #!/bin/bash HOST=127.0.0.1 PORT=3333 NUM=`netstat -tlpn 2>/dev/null | grep -c " ${HOST}:${PORT} "` if [ $NUM -gt 0 ]; then exit fi while [ true ]; do nc -l ${HOST} ${PORT} | xclip -selection clipboard done 

并在后台启动。

 ./clipboard-daemon.sh& 

接收部分数据后,开始将pipe道输出到xclip和respawning进程

然后启动SSH连接到远程主机:

 ssh user@host -R127.0.0.1:3333:127.0.0.1:3333 

在远程盒子上login时,试试这个:

 echo "this is test" >/dev/tcp/127.0.0.1/3333 

然后尝试粘贴在您的工作站上

你当然可以编写包装脚本,首先启动clipboard-daemon.sh然后ssh会话。 这是如何为我工作的。 请享用。