当我 运行 在远程 Linux 机器上通过 ssh in Git Bash?

How can I copy the contents of a file directly into my Windows clipboard when I'm running the command on a remote Linux machine via ssh in Git Bash?

我正在使用 Windows 10。我打开 Git Bash 然后 ssh 进入 Ubuntu 服务器。我经常想复制一个大文本文件的全部内容。

与其使用 scp 将文件下载到我的 Windows 机器,有时我宁愿快速将内容复制到我的剪贴板。

使用 cat 然后滚动数千行然后手动复制到剪贴板是可能的,但不实用。

我宁愿通过管道 cat 将输出复制到我的 Windows 剪贴板的命令。或者调用其他命令,如 xclip.

https://unix.stackexchange.com/questions/211817/copy-the-contents-of-a-file-into-the-clipboard-without-displaying-its-contents and How can I copy the output of a command directly into my clipboard?都是类似的问题,但是xclip导致这个错误:

xclip -sel c < /etc/php/7.4/cli/php.ini
Error: Can't open display: (null)

后更新:

很有趣,但是 X11Forwarding yes 已经在我的服务器配置中,当我在 ForwardX11 yes~/.ssh/config 前面加上 运行 ssh -v -X -t -i ~/.ssh/id_rsa myuser@■■.■■■.■■■.■■,我还有:

debug1: No xauth program.
Warning: untrusted X11 forwarding setup failed: xauth key data not generated

然后当我 运行 xsel -b < /etc/php/7.4/cli/php.ini:

xsel: Can't open display: (null)
: Inappropriate ioctl for device

也许 X session in Git Bash on Windows? 会进一步帮助我。

您的 Windows 主机上需要 X 服务器,ssh 连接中需要 X 隧道。 xclip 会将剪贴板发送到您的 X 服务器,服务器会将其提供给 Windows。

  1. 在您的 Windows 机器上安装 X 服务器。我用的是VcXsrv,还有XMing等。 X的味道不重要。
  2. 启动服务器
  3. 在GitBash中使用命令export DISPLAY=localhost:0.0
  4. 确保远程节点上的 /etc/ssh/sshd.config 有行 X11Forwarding yes
  5. 在 ssh 命令中启用 X11 隧道:将 -Y 标志添加到 sshssh -Y <server_address>

虽然 Stack Overflow 上已经有一些食谱,但有一个小问题。注意 DISPLAY=localhost:0.0。如果省略 localhost,即 export DISPLAY=:0.0,则 xclip 将在远程节点上失败:

connect /tmp/.X11-unix/X0: No such file or directory xterm: Xt error: Can't open display: localhost:10.0