从远程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会话。 这是如何为我工作的。 请享用。