边界服务器故障问题,但我正在编程一些shell脚本,所以我先在这里尝试:)

大多数*nixes都有一个命令,可以让您将输出管道/重定向到本地剪贴板/粘贴板,并从中检索。在OS X上,这些命令是

pbcopy, pbpaste 

当SSHed到另一个服务器时,是否有办法复制此功能?也就是说,

我用的是电脑A。 我打开一个终端窗口 我SSH到计算机B 我在计算机B上运行一个命令 计算机B的输出被重定向或自动复制到计算机A的剪贴板。

是的,我知道我可以(战栗)用鼠标从命令中选择文本,但我已经习惯了直接将输出输出到剪贴板的工作流程,所以我希望远程会话也能这样。

代码很有用,但通用方法也很有用。


当前回答

请允许我补充一个解决方案,如果我没记错的话,之前没有建议过。

它不需要客户端暴露在互联网上(没有反向连接),也不需要在服务器上使用任何xlib,并且完全使用ssh自己的功能来实现(没有第三方的箱子)。

它包括:

打开一个到远程主机的连接,然后在它上面创建一个fifo文件,并并行地等待这个fifo(所有事情都是相同的实际TCP连接)。 回显到fifo文件的任何内容都将在本地剪贴板中结束。 当会话完成时,删除服务器上的fifo文件并一起干净地终止连接。

该解决方案利用ssh的ControlMaster功能,只使用一个TCP连接的一切,因此它甚至将支持需要密码登录的主机,并提示您一次。

编辑:按照要求,代码本身:

将以下内容粘贴到bashrc并使用sshx主机进行连接。

在远程机器上返回SOMETHING > ~/clip,希望SOMETHING最终会出现在本地主机的剪贴板中。

您需要在本地主机上使用xclip实用程序。

_dt_term_socket_ssh() {
    ssh -oControlPath=$1 -O exit DUMMY_HOST
}
function sshx {
    local t=$(mktemp -u --tmpdir ssh.sock.XXXXXXXXXX)
    local f="~/clip"
    ssh -f -oControlMaster=yes -oControlPath=$t $@ tail\ -f\ /dev/null || return 1
    ssh -S$t DUMMY_HOST "bash -c 'if ! [ -p $f ]; then mkfifo $f; fi'" \
        || { _dt_term_socket_ssh $t; return 1; }
    (
    set -e
    set -o pipefail
    while [ 1 ]; do
        ssh -S$t -tt DUMMY_HOST "cat $f" 2>/dev/null | xclip -selection clipboard
    done &
    )
    ssh -S$t DUMMY_HOST \
        || { _dt_term_socket_ssh $t; return 1; }
    ssh -S$t DUMMY_HOST "rm $f"
    _dt_term_socket_ssh $t
}

更详细的解释在我的网站上:

https://xicod.com/2021/02/09/clipboard-over-ssh.html

其他回答

ssh服务器反向隧道端口

所有现有的解决方案要么需要:

客户端上的X11(如果有的话,服务器上的xclip效果很好)或 客户端和服务器在同一个网络中(如果你在工作时试图访问你的家用电脑,情况就不同了)。

这里有另一种方法,不过您需要修改ssh登录计算机的方式。

我已经开始使用这个,它远没有看起来那么吓人,所以试一试。

客户端(ssh会话启动)

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

(提示:使此为键绑定,这样您就不必键入它)

客户端(另一个选项卡)

nc -l 2000 | pbcopy

注意:如果你没有pbcopy,那么就把它tee到一个文件。

服务器(SSH会话内部)

cat some_useful_content.txt | nc localhost 2000

其他的笔记

实际上,即使您在ssh会话中间,也有一种方法可以启动隧道,但我不想把人们吓跑,因为实际上并没有看起来那么糟糕。但如果有人感兴趣的话,我会稍后再补充细节

最简单的解决方案,如果你在OS X上使用Terminal,并且你已经在远程服务器上ssh了,并且希望获取文本文件或日志或csv的结果,简单地:

1) Cmd-K清除终端输出

2) cat <filename>显示文件的内容

3) Cmd-S保存“终端输出”

你需要手动删除文件的第一行和最后一行,但这种方法比依赖其他要安装的包、“反向隧道”和尝试使用静态IP等要简单一些。

远程管理器Linux端口支持在本地和远程主机之间同步剪贴板。您只需打开本地far2l,在里面执行“ssh somehost”,在ssh会话中运行远程far2l,并使用本地剪贴板获得远程far2l。

它支持Linux, *BSD和OS X;我做了一个特殊的putty构建来利用这个功能从窗口也。

对于任何通过谷歌搜索到这个的人来说: 在这个时代,最好的解决方案似乎是柠檬水

在剪贴板工具的neovim帮助文本中也提到了各种解决方案

@rhileighalmgren解决方案很好,但pbcopy会烦人地复制最后一个“\n”字符,我使用“head”剥离最后一个字符来防止这种情况:

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

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