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

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

pbcopy, pbpaste 

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

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

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

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


当前回答

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

1) Cmd-K清除终端输出

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

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

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

其他回答

这是我基于SSH反向隧道、netcat和xclip的解决方案。

首先创建脚本(例如: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&

在接收到部分数据后,将开始数控管道输出到xclip和重生过程

然后启动ssh连接到远程主机:

ssh user@host -R127.0.0.1:3333:127.0.0.1:3333

当登录在远程框上时,尝试这样做:

echo "this is test" >/dev/tcp/127.0.0.1/3333

然后在您的工作站上尝试粘贴

当然,您可以编写包装器脚本,首先启动clipboard-daemon.sh,然后启动ssh会话。这就是我的工作方式。享受。

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

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

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

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

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

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

这个答案在选择的答案基础上发展,增加了更多的安全性。

那个回答讨论了一般形式

<command that makes output> | \
    ssh <user A>@<host A> <command that maps stdin to clipboard>

可能缺乏安全性的地方是允许主机B>上<用户B> ssh到主机A并执行任何命令的ssh权限。

当然,从B到A的访问可能已经由ssh密钥进行了门控,它甚至可能有一个密码。但是另一个安全层可以限制B可以对A执行的允许命令的范围,例如,rm -rf /不能被调用。(当ssh密钥没有密码时,这一点尤其重要。)

幸运的是,ssh有一个称为命令限制或强制命令的内置功能。参见ssh.com,或者 这个serverfault.com问题。

下面的解决方案显示了一般的表单解决方案以及强制执行的ssh命令限制。

增加命令限制的解决方案

这个安全增强的解决方案遵循一般形式-从主机- b上的ssh会话调用简单:

cat <file> | ssh <user-A>@<host A> to_clipboard

剩下的部分显示了使其工作的设置。

ssh命令限制设置

假设B上的用户帐户是user-B, B有一个ssh密钥id-clip,它是以通常的方式创建的(ssh-keygen)。

然后在用户a的ssh目录中有一个文件

/home/user-A/.ssh/authorized_keys

识别密钥id-clip并允许SSH连接。

通常每行authorized_keys的内容就是被授权的公钥,例如id-clip.pub的内容。

但是,为了加强命令限制,公钥内容必须在要执行的命令前(在同一行)。 在我们的例子中:

command="/home/user-A/.ssh/allowed-commands.sh id-clip",no-agent-forwarding,no-port-forwarding,no-user-rc,no-x11-forwarding,no-pty <content of file id-clip.pub>

指定的命令“/home/user-A/.ssh/allowed-commands.sh id-clip”,并且只有指定的命令会在key id-clip被使用时执行到host-A的ssh连接-无论ssh命令行中写了什么命令。

该命令指示允许的脚本文件-commands.sh,该脚本文件的内容为

#/bin/bash
#
# You can have only one forced command in ~/.ssh/authorized_keys. Use this
# wrapper to allow several commands.

Id=${1}

case "$SSH_ORIGINAL_COMMAND" in
    "to-clipboard")
          notify-send "ssh to-clipboard, from ${Id}"
        cat | xsel --display :0 -i -b
          ;;
    *)
        echo "Access denied"
        exit 1
        ;;
esac

在机器B上对ssh的原始调用是

... | ssh <user-A>@<host A> to_clipboard

clipboard的字符串通过环境变量SSH_ORIGINAL_COMMAND传递给allowed-commands.sh。 另外,我们已经从authorized_keys中传递了密钥的名称id-clip,它只能被id-clip访问。

这条线

          notify-send "ssh to-clipboard, from ${Id}"

只是一个弹出的消息框,让你知道剪贴板正在写入-这可能是一个很好的安全功能。(通知发送在Ubuntu 18.04上有效,其他系统可能不行)。

在队列中

cat | xsel --display :0 -i -b

参数——display:0是必要的,因为进程没有自己的X显示和剪贴板, 所以必须明确指定。这个值:0恰好在Ubuntu 18.04和Wayland窗口服务器上工作。在其他设置中,它可能不起作用。对于标准的X服务器,这个答案可能会有所帮助。

host-A /etc/ssh/sshd_config参数

最后,在主机a的/etc/ssh/sshd_config中设置几个参数,以确保有连接权限,以及只使用ssh-key而没有密码的权限:

PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
AllowUsers user-A

使sshd服务器重新读取配置

sudo systemctl restart sshd.service

or

sudo service sshd.service restart

结论

这是一些努力建立,但其他功能除了to-剪贴板可以在相同的框架并行构建。