从远程SSH会话获取本地剪贴板上的项目
边界ServerFault的问题,但我正在编程一些shell脚本,所以我在这里先试试:)
大多数* nixes有一个命令,可以让你pipe道/redirect输出到本地剪贴板/粘贴板,并从相同的检索。 在OS X上,这些命令是
pbcopy, pbpaste
无论如何要复制这个function,而SSH到另一台服务器? 那是,
- 我正在使用电脑A.
- 我打开一个terminal窗口
- 我SSH到计算机B
- 我在计算机B上运行一个命令
- 计算机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。
设置这个:
- 安装XQuartz (我用独奏+ pivotal_workstation :: xquartz食谱做了这个,但是你不需要)
- 运行XQuartz.app
- 打开XQuartz首选项(
+ ,) - 确保选中“启用同步”和“更新剪贴板时更新粘贴板”

-
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 -o或xclip -i -sel clip / xclip -o -sel clip或xsel -i / xsel -o或xsel -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会话。 这是如何为我工作的。 请享用。