内容提要
在软件开发中,通过ssh登录远程机器后,可以使用ssh reverse tunnel方法将远程机器的文本拷贝到本地剪贴板。通过监听端口5689,将接收到的文本拷贝到剪贴板。可以在vim中使用自定义命令将选中的文本发送到5689端口,然后从本地剪贴板粘贴。进一步可以通过base64编码和解码将文件从远程机器复制到本地。
延伸解读
适用场景与限制
该方法主要解决远程机器上大段文本(超过一屏)无法一次性选中复制的问题。对于小段文本,终端直接选中即可,无需此方案。但需注意,它依赖本地已安装netcat和xclip,且远程与本地需建立SSH连接。若网络中断或SSH会话结束,反向隧道会失效,剪贴板服务也会停止。
配置持久化与自动化
为避免每次手动输入-R参数,可将RemoteForward 5689 localhost:5689写入本地.ssh/config的对应Host条目中,这样每次SSH登录都会自动建立反向隧道。同时,本地监听服务需保持运行,否则远程发送的数据无法到达剪贴板。建议将监听命令放入本地启动脚本或使用systemd等工具管理。
vim集成与操作简化
在远程机器的.vimrc中添加自定义命令CL,可将可视模式下选中的文本通过netcat发送到5689端口,进而传回本地剪贴板。这避免了手动执行echo或nc命令的繁琐。使用时先选中文本,再执行:CL即可。注意该命令依赖range,需在可视模式或指定行范围时生效。
文件传输的扩展用法
通过base64编码,可将文件从远程复制到本地。远程定义cp2l函数,将文件base64编码后发送到5689端口;本地定义cp2l函数,从剪贴板读取base64数据并解码保存为文件。执行cp2l file即可。但此方法仅适合小文件,因为剪贴板容量和base64膨胀可能限制大文件传输。
Q&A
如何通过ssh reverse tunnel将远程机器的文本复制到本地剪贴板?
在本地开启服务监听5689端口并将接收到的数据拷贝到剪贴板,然后通过ssh reverse tunnel将远程的5689端口与本地5689端口连接,在远程将文本发送到5689端口即可。
本地如何设置服务来接收远程文本并复制到剪贴板?
在本地命令行执行:while ( true ) ; do nc -l -p 5689 | xclip -selection c ; done,这样netcat会持续监听5689端口,并将接收到的任何数据拷贝到剪贴板。
如何建立ssh reverse tunnel将远程端口转发到本地?
使用ssh命令的-R参数:ssh user@remote-server.com -R 5689:localhost:5689,或者在.ssh/config的对应host条目中添加RemoteForward 5689 localhost:5689,之后登录ssh会自动建立通道。
在vim中如何快速将选中的文本发送到本地剪贴板?
在.vimrc中添加自定义命令:command! -range CL execute '<line1>,<line2>w !nc -N localhost 5689'。在vim中选中文本后执行:CL,文本就会发送到5689端口并出现在本地剪贴板。
如何利用base64编码将远程文件复制到本地?
在远程机器的.bashrc中设置:ncp () { nc -N localhost 5689 } 和 cp2l () { base64 $1 | ncp };在本地机器的.bashrc中设置:function cp2l { xclip -selection c -o | base64 -d > $1 }。然后在远程执行cp2l file,即可将文件复制到本地。
为什么需要ssh reverse tunnel来复制大段文本?
因为大段文本超过一个屏幕,无法在终端一次性选中复制,而ssh reverse tunnel可以方便地将远程大段文本拷贝到本地剪贴板。