Borderline ServerFault问题,但我编程一些shell脚本,所以我先在这里尝试:)
大多数* nixes都有一个命令,可以将输出管道/重定向到本地剪贴板/粘贴板,并从中检索。在OS X上,这些命令是
pbcopy, pbpaste
无论如何在SSH连接到另一台服务器时复制此功能?也就是说,
是的,我知道我可以(颤抖)使用我的鼠标从命令中选择文本,但我已经习惯了直接将输出提取到剪贴板的工作流程,我希望我的遥控器也能这样做会话。
代码很有用,但也赞赏一般方法。
答案 0 :(得分:96)
我最喜欢的方式是ssh [remote-machine] "cat log.txt" | xclip -selection c
。当您不希望(或不能)从远程ssh到本地时,这非常有用。
编辑:在Cygwin上ssh [remote-machine] "cat log.txt" > /dev/clipboard
。
编辑:来自nbren12的有用评论:
几乎总是可以使用SSH端口转发设置反向ssh连接。只需将
RemoteForward 127.0.0.1:2222 127.0.0.1:22
添加到本地.ssh/config
中的服务器条目,然后在远程计算机上执行ssh -p 2222 127.0.0.1
,然后将该连接重定向到本地计算机。 - nbren12
答案 1 :(得分:68)
我正在复活这个帖子因为我一直在寻找同样的解决方案,而且我找到了一个对我有用的解决方案。这是对OSX Daily的建议的一个小修改。
就我而言,我在本地OSX机器上使用Terminal通过SSH连接到linux服务器。和OP一样,我希望能够仅使用键盘将少量文本从终端传输到本地剪贴板。
解决方案的本质:
commandThatMakesOutput | ssh desktop pbcopy
在ssh会话中运行到远程计算机时,此命令获取 commandThatMakesOutput 的输出(例如ls,pwd)并将输出通过管道传输到本地计算机的剪贴板(名称或IP) “桌面”)。换句话说,它使用嵌套的ssh:您通过一个ssh会话连接到远程计算机,在那里执行命令,远程计算机通过不同的ssh会话连接到桌面并将文本放入剪贴板。 / p>
它需要将您的桌面配置为ssh服务器(我留给您和谷歌)。如果您设置了ssh密钥以促进快速ssh使用,最好使用每个会话密码,或者您需要的任何安全性,这会更容易。
其他例子:
ls | ssh desktopIpAddress pbcopy
pwd | ssh desktopIpAddress pbcopy
为方便起见,我创建了一个bash文件来缩短管道后所需的文本:
#!/bin/bash
ssh desktop pbcopy
就我而言,我正在使用一个特别命名的密钥
我用文件名 cb (我的助记符(ClipBoard))保存它。将脚本放在路径中的某个位置,使其可执行,然后瞧:
ls | cb
答案 2 :(得分:26)
找到一个不需要反向ssh连接的出色解决方案!
您可以在远程主机上使用xclip,以及ssh X11 forwarding& amp; OSX系统上的XQuartz。
进行设置:
,
)ssh -X remote-host "echo 'hello from remote-host' | xclip -selection clipboard"
答案 3 :(得分:7)
有多种工具可以访问X11选项,包括xclip和XSel。请注意,X11传统上有多个选择,大多数程序都对剪贴板和主要选择有一些了解(它们不相同)。 Emacs也可以使用辅助选择,但这种情况很少见,没有人真正知道如何处理剪切缓冲区......
$ xclip -help Usage: xclip [OPTION] [FILE]... Access an X server selection for reading or writing. -i, -in read text into X selection from standard input or files (default) -o, -out prints the selection to standard out (generally for piping to a file or program) -l, -loops number of selection requests to wait for before exiting -d, -display X display to connect to (eg localhost:0") -h, -help usage information -selection selection to access ("primary", "secondary", "clipboard" or "buffer-cut") -noutf8 don't treat text as utf-8, use old unicode -version version information -silent errors only, run in background (default) -quiet run in foreground, show what's happening -verbose running commentary Report bugs to <astrand@lysator.liu.se>
$ xsel -help Usage: xsel [options] Manipulate the X selection. By default the current selection is output and not modified if both standard input and standard output are terminals (ttys). Otherwise, the current selection is output if standard output is not a terminal (tty), and the selection is set from standard input if standard input is not a terminal (tty). If any input or output options are given then the program behaves only in the requested mode. If both input and output is required then the previous selection is output before being replaced by the contents of standard input. Input options -a, --append Append standard input to the selection -f, --follow Append to selection as standard input grows -i, --input Read standard input into the selection Output options -o, --output Write the selection to standard output Action options -c, --clear Clear the selection -d, --delete Request that the selection be cleared and that the application owning it delete its contents Selection options -p, --primary Operate on the PRIMARY selection (default) -s, --secondary Operate on the SECONDARY selection -b, --clipboard Operate on the CLIPBOARD selection -k, --keep Do not modify the selections, but make the PRIMARY and SECONDARY selections persist even after the programs they were selected in exit. -x, --exchange Exchange the PRIMARY and SECONDARY selections X options --display displayname Specify the connection to the X server -t ms, --selectionTimeout ms Specify the timeout in milliseconds within which the selection must be retrieved. A value of 0 (zero) specifies no timeout (default) Miscellaneous options -l, --logfile Specify file to log errors to when detached. -n, --nodetach Do not detach from the controlling terminal. Without this option, xsel will fork to become a background process in input, exchange and keep modes. -h, --help Display this help and exit -v, --verbose Print informative messages --version Output version information and exit Please report bugs to <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
,取决于你想要的。
答案 4 :(得分:7)
所有现有解决方案都需要:
xclip
工作正常)或这是另一种方法,但您需要修改自己在计算机中的方式。
我已经开始使用它了,它看起来并不像它看起来那么令人生畏,所以试一试。
ssh username@server.com -R 2000:localhost:2000
(提示:将其设为键绑定,因此您无需键入它)
nc -l 2000 | pbcopy
注意:如果您没有pbcopy
,那么只需tee
到文件。
cat some_useful_content.txt | nc localhost 2000
实际上,即使你正处于ssh会话的中间,也有办法启动隧道,但我不想让人们远离真正没有看起来那么糟糕的东西。但如果我看到任何兴趣,我会在稍后添加细节
答案 5 :(得分:4)
不是单行,但不需要额外的ssh 。
netcat
cat ~/some_file.txt | nc termbin.com 9999
。这会将输出复制到termbin
网站并将URL输出到您的输出。当然,请勿将其用于敏感内容。
答案 6 :(得分:3)
这是我的基于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&
接收部分数据
后,它将启动nc管道输出到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会话的包装脚本。这就是它对我有用的方式。享受。
答案 7 :(得分:1)
@rhileighalmgren解决方案很好,但是pbcopy会烦人地复制最后一个&#34; \ n&#34;性格,我使用&#34; head&#34;删除最后一个字符以防止这种情况:
#!/bin/bash
head -c -1 | ssh desktop pbcopy
我的完整解决方案在这里:http://taylor.woodstitch.com/linux/copy-local-clipboard-remote-ssh-server/
答案 8 :(得分:1)
最简单的解决方案是,如果您使用的是使用Terminal的OS X,并且一直在远程服务器中闲逛,并且希望获取文本文件,日志或csv的结果,则只需:
1)Cmd-K
清除终端的输出
2)cat <filename>
以显示文件的内容
3)Cmd-S
保存终端输出
您将手动删除文件的第一行和最后一行,但是此方法比依赖于要安装的其他软件包,“反向隧道”和尝试具有静态IP等要简单一些。
答案 9 :(得分:1)
Far Manager Linux port支持在本地和远程主机之间同步剪贴板。您只需打开本地far2l,在其中执行“ ssh somehost”,在该ssh会话中运行远程far2l,然后使远程far2l与您的本地剪贴板一起使用。
它支持Linux,* BSD和OS X;我做了一个special putty build来从Windows也利用此功能。
答案 10 :(得分:1)
请允许我添加一个解决方案,如果我没记错的话,之前没有建议过该解决方案。 它涉及:
它利用 ssh 的 ControlMaster 功能来避免连接开销并为您提供干净的连接终止。
此外,远程主机没有特殊要求(例如 x 库)。
编辑:根据要求,代码本身:
将以下内容粘贴到您的 bashrc 中并使用 sshx host
进行连接。
在远程机器 echo SOMETHING > ~/clip
上,希望在本地主机的剪贴板中会有一些东西。
您将需要本地主机上的 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 DUMMY_HOST "cat $f" | 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
}
更详细的解释在我的网站上:
答案 11 :(得分:1)
对于任何使用谷歌搜索的人: 这个时代最好的解决方案似乎是lemonade
neovim 帮助文本中也提到了 clipboard-tool
的各种解决方案答案 12 :(得分:0)
如果您正在工作,例如Kubernetes 集群中的 Pod 而不是直接 SSH,因此您无法进行文件传输,您可以使用 cat
然后将终端输出保存为文本。例如,在 macOS 中,您可以执行 Shell -> 导出为文本。