- 更新:2022-06-23 14:55:40
- 首发:2022-06-22 09:48:05
- 教程
- 9234
从SSH连接的远程环境中在本地网页浏览器中打开URL,且URL是服务器的本机/内网地址。这是完全可以做到的,就像在本地进行软件开发一样。
这里介绍两种方法,一个是仅转发服务器本地端口,在本地浏览器打开运行。另一个是拦截服务器中打开浏览器相关命令,在本地浏览器中打开,且可以配合第一个方法实现本地浏览器打开服务器本地页面。
温馨提示,通过VScode的Remote-SSH插件可以像在本地开发一样编辑服务器上的代码(其它编辑器也有类似功能,例如neovim支持远程网络文件编辑),配合本文的方法可以做到本地调试服务器本地代码。
本地端口转发
ssh -L 8080:127.0.0.1:8080 root@192.168.1.1
SSH具有本地端口转发功能,可以将远程的指定端口的数据转发到发起SSH的计算机,直接调试服务器上的URL。
SSH的-L
参数分别是本地端口:目标主机:目标主机端口
。
上述命令即将服务器的8080
端口绑定到本地的8080
端口,因此在执行了SSH命令后,可以在本地浏览器访问localhost:8080
,访问的内容是远程服务器的内容。这里非常适合做WebRTC
的调试,因为此类调用摄像头权限的页面必须通过localhost
或SSL(https://
)访问。
上面只执行了三条命令:
ssh -L 8000:127.0.0.1:8000 root@192.168.6.7
绑定了本地8000端口到服务器8000端口并通过SSH进入服务器。
echo "Hello World" >> index.html
创建了index.html
文件,内容为Hello World
。
python3 -m http.server 8000 --bind 127.0.0.1
,通过python3创建一个web静态资源服务器,监听8000
端口。
然后在本地浏览器打开http://localhost:8000
,我们发现浏览器可以访问到服务器中的内容但却不需要通过服务器的IP地址。
从SSH远程唤起本地浏览器打开URL
如果远程服务器某个命令是唤起图形桌面系统(GNOME、Xfce、KDE等可视化桌面环境,借助X11等桌面图形后端)浏览器才可以运行的程序,例如Tabnine
这个AI辅助编程的插件,通过SSH在服务中用非图形编辑器(vim/neovim/emacs)调试代码,如果需要运行Tabnine
的设置页面,默认情况下是无法打开的。
原因是Tabnine
的设置需要通过本地浏览器打开带有随机URL参数的URL,因此是通过执行某个Tabnine
设置的命令后自动唤起的服务器,用户实现并不知道设置界面的请求地址。
例如,在Neovim中执行:CmpTabnineHub
的底层命令如下:
/root/.local/share/nvim/site/pack/packer/opt/cmp-tabnine/binaries/4.4.40/x86_64-unknown-linux-musl/TabNine-deep-local --settings /root/.config/TabNine/local.settingsSmall --settings-version 1 --client cmp.vim
Tabnine
会启动对本地5050
端口的监听并唤起本地浏览器打开一个带有随机参数的URL。
因此我们可以借助opener
这个开源项目实现从SSH远程唤起本地浏览器打开URL。
opener
开源仓库地址:https://github.com/superbrothers/opener
需要注意的是,opener目前只支持MacOS,而远程SSH的服务器支持Linux和MacOS,如果是其它本地操作系统,可以参考拦截SSH远程服务器中open
或者xdg-open
命令的思路。因为程序唤起浏览器必定是调用了某个唤起浏览器的API或者命令。
由于opener安装方法作者已经描述的非常详细了,在此就不再赘述了。
最终可以结合SSH本地端口转发的方法,实现从SSH远程唤起本地浏览器打开URL,因此就可以正常对Tabnine
进行设置了。
参考.ssh/config
配置:
Host dev
User root
HostName 192.168.6.7
Port 22
LocalForward 3000 localhost:3000
LocalForward 3333 localhost:3333
LocalForward 5555 localhost:5555
RemoteForward /root/.opener.sock /Users/yige/.opener.sock
常见问题
Q: 在SSH已经连接上,重启程序的时候,或者尚未监听端口的时候,出现类似channel 5: open failed: connect failed: Connection refused
的报错信息,影响开发调试,如何关闭?
A: 可以通过在SSH连接命令增加-q
进入静默模式,或者-o LogLevel=ERROR
屏蔽Fail
类型报错。也可以修改.ssh/config
文件,添加LogLevel=ERROR
。
参考自此处:
ssh
writes that particular message as a log message at the info level. Log messages are written to standard error by default.Ssh has options to control what is logged.
- The configuration setting
LogLevel
sets the log level. Setting the level to QUIET, FATAL, or ERROR would disable the particular message which you're asking about. You can set LogLevel through the "-o" command-line option or through your .ssh/config file.- The "-q" command-line option sets logging to quiet. This should disable that particular message, along with virtually every other message printed by ssh.
- The "-E file " option directs log messages to the named file instead of writing them to stderr. This option is relatively new, and may not be present in your copy of ssh.
- The "-y" option directs log messages to syslog.
- The "-v" option makes logging even more verbose (you don't want this).
其它
通过本文介绍的方法可以非常顺滑的使用局域网服务器作为开发调试设备进行开发工作,可以起到利用服务器强大配置的作用。
暂无内容
感谢回复! Clang 在生成时沿用了 GCC 的版本号标识,我是不是可以理解为Clang 18.1.4生成时使用的就是GCC4.8,所以我后续使用gcc 9.4
gcov
就会有不兼容的问题抱歉,这块我也不太清楚,尝试寻求AI的帮助吧。
我在这个过程中遇到了各种问题- -,现在在UDC core: g_serial: couldn't find an available UDC卡住了,请问大佬有什么解决方案吗,还是说我前置的设置就错了呢,> 这个需求很特殊。是可以的,但是比较困难,需要修改驱动配置。
好思路呀!!
关于hex编辑器,网上没找到特别好用的(小白没办法),最后在vscode上扩展一搜hex,第一个安装一下就可以用vscode进行hex编译了