这是我的使用案例:
- 我经常通过 SSH 连接到其他计算机进行工作,并且经常需要将文档/文本从服务器复制并粘贴到本地运行的编辑器以编写示例和共享文本。
- 通常,如果文本足够小,我只需复制终端程序(目前为 gnome-terminal)的输出并粘贴即可。
- 然而,当涉及到整个文档时,我的选择非常有限。我可以逐块复制文档,也可以将
scp
其复制到本地计算机。
有没有办法使用一个程序,例如xclip
允许我将远程复制stdin
到本地 X 服务器的剪贴板?一些效果:
cat myconffile.conf | sed {...} | copy-over-ssh-to-local-clipboard
会很棒的。有什么东西可以让这成为可能吗?
答案1
如果您运行带有 X 转发的 ssh,这是透明的:远程命令(包括xclip
)可以访问您的 X 服务器(包括其键盘)。确保您和服务器ForwardX11 yes
中都有(根据您的发行版,这些选项可能默认打开或关闭)。~/.ssh/config
X11Forwarding yes
sshd_config
<myconffile.conf sed {...} | xclip -i
还有其他可能更方便的处理远程文件的方法,例如使用以下命令在本地计算机上安装远程目录SSHfs,或者在 Emacs 中打开远程文件流浪汉。如果你有 ssh 和保险丝设置并安装 SSHfs,SSHfs 就像mkdir ~/net/myserver; sshfs myserver:/ ~/net/myserver
.如果您设置了 ssh 并安装了 Emacs,Tramp 就像打开 一样简单/myserver:/path/to/file
。
答案2
你不需要任何特别的东西;既然xclip
工作结束了stdin
,就
ssh remotehost xclip < myconf.conf
为什么需要修改它sed
? ssh
不作为终端时对数据透明,常用于管道,如
tar cfz - somedir | ssh remotehost 'cd destdir; tar xfz -'`
答案3
以下是您在本地计算机上在 OSX 上执行此操作的方法
ssh remotehost.com "<some/file.txt" | pbcopy
答案4
与 @d-raev 和 @william-casarin 的解决方案非常相似,但是,它是不同的,所以我分享对我有用的方法。
命令
ssh user@host "cat <myconffile.conf" | xclip -sel clip
解释
这用于ssh
创建安全隧道,登录到user
@host
或ip
,然后执行cat
打印 to 的内容,<myconffile.conf
然后将其通过管道传输到本地计算机上的stdout
命令,该命令将 的内容放入本地计算机上的剪贴板中。xclip -sel clip
<myconffile.conf
真实世界的示例用法
我使用此命令结构来执行任务,例如在 Ubuntu 16.04 和 18.04 上使用 Bash 将 ssh 密钥粘贴到 github(运行命令后允许简单的 ctrl-V 或粘贴选择)。查看man ssh
、man cat
、 和man xclip
了解行为和选项详细信息。