边界服务器故障问题,但我正在编程一些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
请允许我补充一个解决方案,如果我没记错的话,之前没有建议过。
它不需要客户端暴露在互联网上(没有反向连接),也不需要在服务器上使用任何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