我正在尝试从我的 mac 上通过 ssh 会话剪切粘贴一些交换机配置。它似乎在设置缓冲区大小后开始破坏它。当然,剪切粘贴缓冲区足够大,因为我可以在其他程序中很好地剪切粘贴(甚至用于同一 ssh 会话的 chrome 终端模拟器也足够有趣)。有没有办法增加 MacOS 上终端的剪切粘贴缓冲区,或者我是否卡在短时间的剪切粘贴中?
编辑: 因此,在我连接的操作系统上对内核 tty 驱动程序进行了大量调试之后,我发现其根本原因是特定的 tty 实现,它只有一个小缓冲区(1k)。因此,粘贴任何较大的内容都会超出该缓冲区并产生上述问题。使用 Chrome 终端模拟器,看起来它有自己的缓冲区,只是等待提示并将其逐行发送到 pty。
答案1
我没有解决方案来增加您可以粘贴到 SSH 会话中的数据量,但我确实有一个可能适合您的解决方法。解决方法涉及 X11 转发 OS X 剪贴板并与 X 服务器粘贴板共享。
设置 X11 转发
要在远程服务器上设置 X11 转发,您需要编辑/etc/ssh/sshd_config
文件并更改行
#X11Forwarding no
到
X11Forwarding yes
你需要重新开始更新/etc/ssh/sshd_config
文件后的 SSH 守护程序。现在我们需要使用xauth
适合您平台的命令在您的远程服务器上安装
sudo pacman -S xorg-xauth # Arch-Linux
sudo apt-get install xauth # Debian/Ubuntu/etc.
sudo yum install xauth # RHEL/CentOS/Fedora/etc.
然后,您可以使用-X
, 或 -Y
选项连接到您的服务器。
-X
将启用 X11 转发。-Y
将启用可信 X11 转发。
根据您的 OpenSSH 版本,可能需要也可能不需要此步骤。OpenSSH 中存在一个已知错误,会导致出现以下消息
X11 转发请求在通道 0 上失败
当尝试使用 X11 转发连接到远程服务器时。修复方法是编辑您的/etc/ssh/sshd_config
文件并更改行
#X11UseLocalhost yes
到
X11UseLocalhost no
您现在应该能够成功连接到启用 X11 转发的远程服务器。
共享 OS X 和 X 服务器剪贴板
要与 X 服务器共享 OS X 键盘,我们需要编辑该文件~/Library/Preferences/org.x.X11.plist
,或者~/Library/Preferences/org.macosforge.xquartz.X11.plist
根据您的 OS X 版本。您可以使用ls ~/Library/Preferences/ | grep X11
来确定需要编辑哪个文件。我们需要为此添加 5 个布尔键
sync_clipboard_to_pasteboard
sync_pasteboard
sync_pasteboard_to_clipboard
sync_pasteboard_to_primary
sync_primary_on_select
添加这些的最简单方法可能是使用终端命令
defaults write org.macosforge.xquartz.X11 sync_clipboard_to_pasteboard -boolean true
defaults write org.macosforge.xquartz.X11 sync_pasteboard -boolean true
defaults write org.macosforge.xquartz.X11 sync_pasteboard_to_clipboard -boolean true
defaults write org.macosforge.xquartz.X11 sync_pasteboard_to_primary -boolean true
defaults write org.macosforge.xquartz.X11 sync_primary_on_select -boolean true
必要时替换org.macosforge.xquartz.X11
为org.x.X11
。进行此更改后,您还需要重新启动 X 服务器,注销 SSH 会话并从扩展坞退出应用程序就足够了。
似乎还有一个XQuartz 中的错误随更高版本的 OS X 一起提供,要求您xclock
在共享 OS X 和 X 服务器剪贴板之前从 OS X 终端启动。
复制和粘贴
现在一切就绪,可以在 OS X 剪贴板和 X 服务器剪贴板之间进行复制和粘贴。最后要做的就是xclip
在远程服务器上安装复制和粘贴尽您所能。
初始化复制和粘贴所需的顺序是首先通过 SSH 连接到远程服务器
$ ssh -X [user@]hostname
然后在另一个终端窗口中运行
$ xclock
^C
其中^C
代表 CTRL+C。使用 或 CMD+C 从 OS X 复制pbcopy
并使用 .paste 粘贴到远程服务器上xclip
。
xclip -o
将打印剪贴板的内容到stdout
,同时xclip -i
stdin
将从剪贴板读取