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

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

pbcopy, pbpaste 

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

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

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

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


当前回答

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

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

其他回答

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

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

编辑:来自nbren12的有用评论:

几乎总是可以使用ssh端口转发建立反向ssh连接。只需将RemoteForward 127.0.0.1:2222 127.0.0.1:22添加到本地.ssh/config中的服务器条目中,然后在远程计算机上执行ssh -p 2222 127.0.0.1,然后将连接重定向到本地计算机。——nbren12

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

它不需要客户端暴露在互联网上(没有反向连接),也不需要在服务器上使用任何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

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

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

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

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

不是一行程序,但不需要额外的ssh。

必要时安装netcat 使用termbin: cat ~/some_file.txt | nc termbin.com 9999。这将把输出复制到termbin网站,并将URL打印到输出中。 从您的计算机访问该url,您将获得输出

当然,不要将其用于敏感内容。